| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 | #include <TinyGPS++.h>#include <SoftwareSerial.h>/*   This sample code demonstrates just about every built-in operation of TinyGPS++ (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 TinyGPS++ objectTinyGPSPlus gps;// The serial connection to the GPS deviceSoftwareSerial ss(RXPin, TXPin);// For stats that happen every 5 secondsunsigned long last = 0UL;void setup(){  Serial.begin(115200);  ss.begin(GPSBaud);  Serial.println(F("KitchenSink.ino"));  Serial.println(F("Demonstrating nearly every feature of TinyGPS++"));  Serial.print(F("Testing TinyGPS++ 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();  }}
 |