mirror of
				https://github.com/KevinMidboe/Arduino.git
				synced 2025-10-29 17:40:11 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			191 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #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++ 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 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();
 | |
|   }
 | |
| } |