#include "gps.h" #include "settings.h" // The GPS message decoder TinyGPSPlus gps; // The serial connection to the GPS device SoftwareSerial serial_gps(PIN_GPS_RX, PIN_GPS_TX); void gps_begin() { // Initialise the software-based serial connection to the GPS device serial_gps.begin(BAUD_GPS); } TinyGPSLocation gps_location() { Serial.print("[gps] Getting location: "); // We WILL discover our location - if it's the last thing we do! while(true) { if(millis() > 5000 && gps.charsProcessed() < 10) { Serial.println(F("\n[error] Failed to initialise GPS device.")); while(true) { delay(1); } } // Make sure there's something to read if(serial_gps.available() <= 0) { continue; } // If it failed, go around again if(!gps.encode(serial_gps.read())) continue; // If we haven't acquired a lock yet, go around again // Also go around again if the location is the same hasn't yet been updated (GPS devices are strange) if(!gps.location.isValid()) { Serial.print("."); delay(100); continue; } // Hooray! Serial.println("ok"); return gps.location; } } void gps_end() { Serial.println(F("[warning] Putting the GPS device to sleep isn't implemented yet.")); }