#include <TinyGPS++.h>
#include <SoftwareSerial.h>
SoftwareSerial gpsSerial(3, 4); // RX: 3, TX: 4 (arduino)
TinyGPSPlus gps;
void setup() {
Serial.begin(9600); // baudrate of arduino
gpsSerial.begin(9600); // baudrate of gps
}
void loop() {
if (gpsSerial.available() > 0) {
if (gps.encode(gpsSerial.read())) {
if (gps.location.isValid()) {
Serial.print(F("Latitude: ")); // F() stores the string "Latitude: " in flash memory instead of RAM.
Serial.print(gps.location.lat(), 7);
Serial.print(F("Longitude: "));
Serial.print(gps.location.lng(), 7);
Serial.print(F("Altitude: "));
if (gps.altitude.isValid())
Serial.println(gps.altitude.meters());
else
Serial.println(F("INVALID"));
} else {
Serial.println(F("Location: INVALID"));
} // end of else for location
Serial.print(F("Speed: "));
if (gps.speed.isValid()) {
Serial.print(gps.speed.kmph());
Serial.println(F(" km/h"));
} else {
Serial.println(F("INVALID"));
} // end of else for speed
Serial.print(F("Date: "));
if (gps.date.isValid()); {
Serial.print(gps.date.year());
Serial.print(F("-"));
Serial.print(gps.date.month());
Serial.print(F("-"));
Serial.print(gps.date.day());
} else {
Serial.println(F("INVALID"));
} // end of else for date
Serial.print(F("Time: "));
if (gps.time.isValid()); {
Serial.print(gps.time.hour());
Serial.print(F(":"));
Serial.print(gps.time.minute());
Serial.print(F(":"));
Serial.print(gps.time.second());
} else {
Serial.println(F("INVALID"));
} // end of else for time
Serial.println();
} // end of if (gps.encode(gpsSerial.read()))
}
// detects if there is communication gps issue
if (millis() > 5000 && gps.charsProcessed() < 10)
Serial.println(F("No GPS data received"));
} // end of loop