/* * TimeGPS.pde * example code illustrating time synced from a GPS * */ #include #include // http://arduiniana.org/libraries/TinyGPS/ #include // 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); }