Files

copied
Last update 7 years 9 months by Hu-Cheng Lee
FileslibraryTimeexamplesTimeSerialDateStrings
..
TimeSerialDateStrings.ino
TimeSerialDateStrings.ino
/* * TimeSerialDateStrings.pde * example code illustrating Time library date strings * * This sketch adds date string functionality to TimeSerial sketch * Also shows how to handle different messages * * A message starting with a time header sets the time * A Processing example sketch to automatically send the messages is inclided in the download * On Linux, you can use "date +T%s\n > /dev/ttyACM0" (UTC time zone) * * A message starting with a format header sets the date format * send: Fs\n for short date format * send: Fl\n for long date format */ #include <TimeLib.h> // single character message tags #define TIME_HEADER 'T' // Header tag for serial time sync message #define FORMAT_HEADER 'F' // Header tag indicating a date format message #define FORMAT_SHORT 's' // short month and day strings #define FORMAT_LONG 'l' // (lower case l) long month and day strings #define TIME_REQUEST 7 // ASCII bell character requests a time sync message static boolean isLongFormat = true; void setup() { Serial.begin(9600); while (!Serial) ; // Needed for Leonardo only setSyncProvider( requestSync); //set function to call when sync required Serial.println("Waiting for sync message"); } void loop(){ if (Serial.available() > 1) { // wait for at least two characters char c = Serial.read(); if( c == TIME_HEADER) { processSyncMessage(); } else if( c== FORMAT_HEADER) { processFormatMessage(); } } if (timeStatus()!= timeNotSet) { digitalClockDisplay(); } delay(1000); } void digitalClockDisplay() { // digital clock display of the time Serial.print(hour()); printDigits(minute()); printDigits(second()); Serial.print(" "); if(isLongFormat) Serial.print(dayStr(weekday())); else Serial.print(dayShortStr(weekday())); Serial.print(" "); Serial.print(day()); Serial.print(" "); if(isLongFormat) Serial.print(monthStr(month())); else Serial.print(monthShortStr(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); } void processFormatMessage() { char c = Serial.read(); if( c == FORMAT_LONG){ isLongFormat = true; Serial.println(F("Setting long format")); } else if( c == FORMAT_SHORT) { isLongFormat = false; Serial.println(F("Setting short format")); } } void processSyncMessage() { unsigned long pctime; const unsigned long DEFAULT_TIME = 1357041600; // Jan 1 2013 - paul, perhaps we define in time.h? pctime = Serial.parseInt(); if( pctime >= DEFAULT_TIME) { // check the integer is a valid time (greater than Jan 1 2013) setTime(pctime); // Sync Arduino clock to the time received on the serial port } } time_t requestSync() { Serial.write(TIME_REQUEST); return 0; // the time will be sent later in response to serial mesg }
Report a bug