191 lines
5.5 KiB
C++
191 lines
5.5 KiB
C++
#include <TinyGPSPlus.h>
|
|
#include <SoftwareSerial.h>
|
|
/*
|
|
This sample code demonstrates just about every built-in operation of TinyGPSPlus (TinyGPSPlus).
|
|
It requires the use of SoftwareSerial, and assumes that you have a
|
|
4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx).
|
|
*/
|
|
static const int RXPin = 4, TXPin = 3;
|
|
static const uint32_t GPSBaud = 4800;
|
|
|
|
// The TinyGPSPlus object
|
|
TinyGPSPlus gps;
|
|
|
|
// The serial connection to the GPS device
|
|
SoftwareSerial ss(RXPin, TXPin);
|
|
|
|
// For stats that happen every 5 seconds
|
|
unsigned long last = 0UL;
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(115200);
|
|
ss.begin(GPSBaud);
|
|
|
|
Serial.println(F("KitchenSink.ino"));
|
|
Serial.println(F("Demonstrating nearly every feature of TinyGPSPlus"));
|
|
Serial.print(F("Testing TinyGPSPlus library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
|
|
Serial.println(F("by Mikal Hart"));
|
|
Serial.println();
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
// Dispatch incoming characters
|
|
while (ss.available() > 0)
|
|
gps.encode(ss.read());
|
|
|
|
if (gps.location.isUpdated())
|
|
{
|
|
Serial.print(F("LOCATION Fix Age="));
|
|
Serial.print(gps.location.age());
|
|
Serial.print(F("ms Raw Lat="));
|
|
Serial.print(gps.location.rawLat().negative ? "-" : "+");
|
|
Serial.print(gps.location.rawLat().deg);
|
|
Serial.print("[+");
|
|
Serial.print(gps.location.rawLat().billionths);
|
|
Serial.print(F(" billionths], Raw Long="));
|
|
Serial.print(gps.location.rawLng().negative ? "-" : "+");
|
|
Serial.print(gps.location.rawLng().deg);
|
|
Serial.print("[+");
|
|
Serial.print(gps.location.rawLng().billionths);
|
|
Serial.print(F(" billionths], Lat="));
|
|
Serial.print(gps.location.lat(), 6);
|
|
Serial.print(F(" Long="));
|
|
Serial.println(gps.location.lng(), 6);
|
|
}
|
|
|
|
else if (gps.date.isUpdated())
|
|
{
|
|
Serial.print(F("DATE Fix Age="));
|
|
Serial.print(gps.date.age());
|
|
Serial.print(F("ms Raw="));
|
|
Serial.print(gps.date.value());
|
|
Serial.print(F(" Year="));
|
|
Serial.print(gps.date.year());
|
|
Serial.print(F(" Month="));
|
|
Serial.print(gps.date.month());
|
|
Serial.print(F(" Day="));
|
|
Serial.println(gps.date.day());
|
|
}
|
|
|
|
else if (gps.time.isUpdated())
|
|
{
|
|
Serial.print(F("TIME Fix Age="));
|
|
Serial.print(gps.time.age());
|
|
Serial.print(F("ms Raw="));
|
|
Serial.print(gps.time.value());
|
|
Serial.print(F(" Hour="));
|
|
Serial.print(gps.time.hour());
|
|
Serial.print(F(" Minute="));
|
|
Serial.print(gps.time.minute());
|
|
Serial.print(F(" Second="));
|
|
Serial.print(gps.time.second());
|
|
Serial.print(F(" Hundredths="));
|
|
Serial.println(gps.time.centisecond());
|
|
}
|
|
|
|
else if (gps.speed.isUpdated())
|
|
{
|
|
Serial.print(F("SPEED Fix Age="));
|
|
Serial.print(gps.speed.age());
|
|
Serial.print(F("ms Raw="));
|
|
Serial.print(gps.speed.value());
|
|
Serial.print(F(" Knots="));
|
|
Serial.print(gps.speed.knots());
|
|
Serial.print(F(" MPH="));
|
|
Serial.print(gps.speed.mph());
|
|
Serial.print(F(" m/s="));
|
|
Serial.print(gps.speed.mps());
|
|
Serial.print(F(" km/h="));
|
|
Serial.println(gps.speed.kmph());
|
|
}
|
|
|
|
else if (gps.course.isUpdated())
|
|
{
|
|
Serial.print(F("COURSE Fix Age="));
|
|
Serial.print(gps.course.age());
|
|
Serial.print(F("ms Raw="));
|
|
Serial.print(gps.course.value());
|
|
Serial.print(F(" Deg="));
|
|
Serial.println(gps.course.deg());
|
|
}
|
|
|
|
else if (gps.altitude.isUpdated())
|
|
{
|
|
Serial.print(F("ALTITUDE Fix Age="));
|
|
Serial.print(gps.altitude.age());
|
|
Serial.print(F("ms Raw="));
|
|
Serial.print(gps.altitude.value());
|
|
Serial.print(F(" Meters="));
|
|
Serial.print(gps.altitude.meters());
|
|
Serial.print(F(" Miles="));
|
|
Serial.print(gps.altitude.miles());
|
|
Serial.print(F(" KM="));
|
|
Serial.print(gps.altitude.kilometers());
|
|
Serial.print(F(" Feet="));
|
|
Serial.println(gps.altitude.feet());
|
|
}
|
|
|
|
else if (gps.satellites.isUpdated())
|
|
{
|
|
Serial.print(F("SATELLITES Fix Age="));
|
|
Serial.print(gps.satellites.age());
|
|
Serial.print(F("ms Value="));
|
|
Serial.println(gps.satellites.value());
|
|
}
|
|
|
|
else if (gps.hdop.isUpdated())
|
|
{
|
|
Serial.print(F("HDOP Fix Age="));
|
|
Serial.print(gps.hdop.age());
|
|
Serial.print(F("ms raw="));
|
|
Serial.print(gps.hdop.value());
|
|
Serial.print(F(" hdop="));
|
|
Serial.println(gps.hdop.hdop());
|
|
}
|
|
|
|
else if (millis() - last > 5000)
|
|
{
|
|
Serial.println();
|
|
if (gps.location.isValid())
|
|
{
|
|
static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;
|
|
double distanceToLondon =
|
|
TinyGPSPlus::distanceBetween(
|
|
gps.location.lat(),
|
|
gps.location.lng(),
|
|
LONDON_LAT,
|
|
LONDON_LON);
|
|
double courseToLondon =
|
|
TinyGPSPlus::courseTo(
|
|
gps.location.lat(),
|
|
gps.location.lng(),
|
|
LONDON_LAT,
|
|
LONDON_LON);
|
|
|
|
Serial.print(F("LONDON Distance="));
|
|
Serial.print(distanceToLondon/1000, 6);
|
|
Serial.print(F(" km Course-to="));
|
|
Serial.print(courseToLondon, 6);
|
|
Serial.print(F(" degrees ["));
|
|
Serial.print(TinyGPSPlus::cardinal(courseToLondon));
|
|
Serial.println(F("]"));
|
|
}
|
|
|
|
Serial.print(F("DIAGS Chars="));
|
|
Serial.print(gps.charsProcessed());
|
|
Serial.print(F(" Sentences-with-Fix="));
|
|
Serial.print(gps.sentencesWithFix());
|
|
Serial.print(F(" Failed-checksum="));
|
|
Serial.print(gps.failedChecksum());
|
|
Serial.print(F(" Passed-checksum="));
|
|
Serial.println(gps.passedChecksum());
|
|
|
|
if (gps.charsProcessed() < 10)
|
|
Serial.println(F("WARNING: No GPS data. Check wiring."));
|
|
|
|
last = millis();
|
|
Serial.println();
|
|
}
|
|
} |