|
- /*
- * TimeGPS.pde
- * example code illustrating time synced from a GPS
- *
- */
-
- #include <TimeLib.h>
- #include <TinyGPS.h> // http://arduiniana.org/libraries/TinyGPS/
- #include <SoftwareSerial.h>
- // TinyGPS and SoftwareSerial libraries are the work of Mikal Hart
-
- SoftwareSerial SerialGPS = SoftwareSerial(10, 11); // receive on pin 10
- TinyGPS gps;
-
- // To use a hardware serial port, which is far more efficient than
- // SoftwareSerial, uncomment this line and remove SoftwareSerial
- //#define SerialGPS Serial1
-
- // Offset hours from gps time (UTC)
- const int offset = 1; // Central European Time
- //const int offset = -5; // Eastern Standard Time (USA)
- //const int offset = -4; // Eastern Daylight Time (USA)
- //const int offset = -8; // Pacific Standard Time (USA)
- //const int offset = -7; // Pacific Daylight Time (USA)
-
- // Ideally, it should be possible to learn the time zone
- // based on the GPS position data. However, that would
- // require a complex library, probably incorporating some
- // sort of database using Eric Muller's time zone shape
- // maps, at http://efele.net/maps/tz/
-
- time_t prevDisplay = 0; // when the digital clock was displayed
-
- void setup()
- {
- Serial.begin(9600);
- while (!Serial) ; // Needed for Leonardo only
- SerialGPS.begin(4800);
- Serial.println("Waiting for GPS time ... ");
- }
-
- void loop()
- {
- while (SerialGPS.available()) {
- if (gps.encode(SerialGPS.read())) { // process gps messages
- // when TinyGPS reports new data...
- unsigned long age;
- int Year;
- byte Month, Day, Hour, Minute, Second;
- gps.crack_datetime(&Year, &Month, &Day, &Hour, &Minute, &Second, NULL, &age);
- if (age < 500) {
- // set the Time to the latest GPS reading
- setTime(Hour, Minute, Second, Day, Month, Year);
- adjustTime(offset * SECS_PER_HOUR);
- }
- }
- }
- if (timeStatus()!= timeNotSet) {
- if (now() != prevDisplay) { //update the display only if the time has changed
- prevDisplay = now();
- digitalClockDisplay();
- }
- }
- }
-
- void digitalClockDisplay(){
- // digital clock display of the time
- Serial.print(hour());
- printDigits(minute());
- printDigits(second());
- Serial.print(" ");
- Serial.print(day());
- Serial.print(" ");
- Serial.print(month());
- Serial.print(" ");
- Serial.print(year());
- Serial.println();
- }
-
- void printDigits(int digits) {
- // utility function for digital clock display: prints preceding colon and leading 0
- Serial.print(":");
- if(digits < 10)
- Serial.print('0');
- Serial.print(digits);
- }
|