|
- /*
- * 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
- }
|