#include <TinyGPSPlus.h>
#define RXD2 16
#define TXD2 17
float gpsLattitude, gpsLongitude;
TinyGPSPlus gps;
void setup() {
Serial.begin(115200);
Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
Serial2.setTimeout(2000);
Serial.println("-- Application launched ---- ");
delay(2000);
}
void loop() {
if (readGpsData(5, 2000)) {
// Reading GPS Location
if (gps.location.isValid()) {
gpsLattitude = gps.location.lat();
gpsLongitude = gps.location.lng();
Serial.print("Latitude: "); Serial.println(gpsLattitude, 6);
Serial.print("Longitude: "); Serial.println(gpsLongitude, 6);
} else {
Serial.println(F("INVALID LOCATION"));
}
delay(1000);
} else {
Serial.println("NO DATA AVAILABLE FROM SERIAL COM");
}
}
int readGpsData(uint8_t TrialNbr, unsigned long rdinterval) {
uint8_t ValidState = 0;
// Flushing Serial before reading
while (Serial2.available() == 0);
while (Serial2.available()) {
char Cflush = Serial2.read();
}
while (ValidState == 0 && TrialNbr-- > 0) {
unsigned long start = millis();
do {
while (Serial2.available()) gps.encode(Serial2.read());
} while (millis() - start < rdinterval);
if (gps.charsProcessed() < 10) {
ValidState = 0;
} else
ValidState = 1;
}
return ValidState;
}