summaryrefslogtreecommitdiff
path: root/Time/Examples/TimeSerialDateStrings/TimeSerialDateStrings.pde
diff options
context:
space:
mode:
Diffstat (limited to 'Time/Examples/TimeSerialDateStrings/TimeSerialDateStrings.pde')
-rw-r--r--Time/Examples/TimeSerialDateStrings/TimeSerialDateStrings.pde80
1 files changed, 80 insertions, 0 deletions
diff --git a/Time/Examples/TimeSerialDateStrings/TimeSerialDateStrings.pde b/Time/Examples/TimeSerialDateStrings/TimeSerialDateStrings.pde
new file mode 100644
index 0000000..dcff97e
--- /dev/null
+++ b/Time/Examples/TimeSerialDateStrings/TimeSerialDateStrings.pde
@@ -0,0 +1,80 @@
+/*
+ * TimeSerialDateStrings.pde
+ * example code illustrating Time library date strings
+ *
+ * This sketch adds date string functionality to TimeSerial.pde
+ *
+ */
+
+#include <Time.h>
+
+#define TIME_MSG_LEN 11 // time sync to PC is HEADER followed by unix time_t as ten ascii digits
+#define TIME_HEADER 'T' // Header tag for serial time sync message
+#define TIME_REQUEST 7 // ASCII bell character requests a time sync message
+
+void setup() {
+ Serial.begin(9600);
+ setSyncProvider( requestSync); //set function to call when sync required
+ Serial.println("Waiting for sync message");
+}
+
+void loop(){
+ if(Serial.available() )
+ {
+ processSyncMessage();
+ }
+ if(timeStatus()!= timeNotSet)
+ {
+ digitalClockDisplay();
+ }
+ delay(1000);
+}
+
+void digitalClockDisplay(){
+ // digital clock display of the time
+ Serial.print(hour());
+ printDigits(minute());
+ printDigits(second());
+ Serial.print(" ");
+ Serial.print(dayStr(weekday()));
+ Serial.print(" ");
+ Serial.print(day());
+ Serial.print(" ");
+ 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 processSyncMessage() {
+ // if time sync available from serial port, update time and return true
+ while(Serial.available() >= TIME_MSG_LEN ){ // time message consists of a header and ten ascii digits
+ char c = Serial.read() ;
+ Serial.print(c);
+ if( c == TIME_HEADER ) {
+ time_t pctime = 0;
+ for(int i=0; i < TIME_MSG_LEN -1; i++){
+ c = Serial.read();
+ if( c >= '0' && c <= '9'){
+ pctime = (10 * pctime) + (c - '0') ; // convert digits to a number
+ }
+ }
+ setTime(pctime); // Sync Arduino clock to the time received on the serial port
+ }
+ }
+}
+
+time_t requestSync()
+{
+ Serial.print(TIME_REQUEST,BYTE);
+ return 0; // the time will be sent later in response to serial mesg
+}
+