/** * ___ ___ _ _ _ ___ __ ___ ___ ___ ___ * | __/ _ \| \| | /_\ ( _ )/ \( _ ) / __| _ \/ __| * | _| (_) | .` |/ _ \ / _ \ () / _ \ | (_ | _/\__ \ * |_| \___/|_|\_/_/ \_\ \___/\__/\___/ \___|_| |___/ * * This example is meant to work with the Adafruit * FONA 808 or 3G Shield or Breakout * * Copyright: 2015 Adafruit * Author: Todd Treece * Licence: MIT * */ #include "Adafruit_FONA.h" // standard pins for the shield, adjust as necessary #define FONA_RX 2 #define FONA_TX 3 #define FONA_RST 4 // We default to using software serial. If you want to use hardware serial // (because softserial isnt supported) comment out the following three lines // and uncomment the HardwareSerial line #include SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX); SoftwareSerial *fonaSerial = &fonaSS; // Hardware serial is also possible! // HardwareSerial *fonaSerial = &Serial1; Adafruit_FONA fona = Adafruit_FONA(FONA_RST); // Have a FONA 3G? use this object type instead //Adafruit_FONA_3G fona = Adafruit_FONA_3G(FONA_RST); void setup() { while (! Serial); Serial.begin(115200); Serial.println(F("Adafruit FONA 808 & 3G GPS demo")); Serial.println(F("Initializing FONA... (May take a few seconds)")); fonaSerial->begin(4800); if (! fona.begin(*fonaSerial)) { Serial.println(F("Couldn't find FONA")); while(1); } Serial.println(F("FONA is OK")); // Try to enable GPRS Serial.println(F("Enabling GPS...")); fona.enableGPS(true); } void loop() { delay(2000); float latitude, longitude, speed_kph, heading, speed_mph, altitude; // if you ask for an altitude reading, getGPS will return false if there isn't a 3D fix boolean gps_success = fona.getGPS(&latitude, &longitude, &speed_kph, &heading, &altitude); if (gps_success) { Serial.print("GPS lat:"); Serial.println(latitude, 6); Serial.print("GPS long:"); Serial.println(longitude, 6); Serial.print("GPS speed KPH:"); Serial.println(speed_kph); Serial.print("GPS speed MPH:"); speed_mph = speed_kph * 0.621371192; Serial.println(speed_mph); Serial.print("GPS heading:"); Serial.println(heading); Serial.print("GPS altitude:"); Serial.println(altitude); } else { Serial.println("Waiting for FONA GPS 3D fix..."); } // Fona 3G doesnt have GPRSlocation :/ if ((fona.type() == FONA3G_A) || (fona.type() == FONA3G_E)) return; // Check for network, then GPRS Serial.println(F("Checking for Cell network...")); if (fona.getNetworkStatus() == 1) { // network & GPRS? Great! Print out the GSM location to compare boolean gsmloc_success = fona.getGSMLoc(&latitude, &longitude); if (gsmloc_success) { Serial.print("GSMLoc lat:"); Serial.println(latitude, 6); Serial.print("GSMLoc long:"); Serial.println(longitude, 6); } else { Serial.println("GSM location failed..."); Serial.println(F("Disabling GPRS")); fona.enableGPRS(false); Serial.println(F("Enabling GPRS")); if (!fona.enableGPRS(true)) { Serial.println(F("Failed to turn GPRS on")); } } } }