| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | /* * 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 HartSoftwareSerial SerialGPS = SoftwareSerial(10, 11);  // receive on pin 10TinyGPS 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 displayedvoid 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);}
 |