summaryrefslogtreecommitdiff
path: root/Time/Examples/TimeRTCSet/TimeRTCSet.pde
diff options
context:
space:
mode:
Diffstat (limited to 'Time/Examples/TimeRTCSet/TimeRTCSet.pde')
-rw-r--r--Time/Examples/TimeRTCSet/TimeRTCSet.pde82
1 files changed, 82 insertions, 0 deletions
diff --git a/Time/Examples/TimeRTCSet/TimeRTCSet.pde b/Time/Examples/TimeRTCSet/TimeRTCSet.pde
new file mode 100644
index 0000000..48b696c
--- /dev/null
+++ b/Time/Examples/TimeRTCSet/TimeRTCSet.pde
@@ -0,0 +1,82 @@
+/*
+ * TimeRTCSet.pde
+ * example code illustrating Time library with Real Time Clock.
+ *
+ * RTC clock is set in response to serial port time message
+ * A Processing example sketch to set the time is inclided in the download
+ */
+
+#include <Time.h>
+#include <Wire.h>
+#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t
+
+
+void setup() {
+ Serial.begin(9600);
+ setSyncProvider(RTC.get); // the function to get the time from the RTC
+ if(timeStatus()!= timeSet)
+ Serial.println("Unable to sync with the RTC");
+ else
+ Serial.println("RTC has set the system time");
+}
+
+void loop()
+{
+ if(Serial.available())
+ {
+ time_t t = processSyncMessage();
+ if(t >0)
+ {
+ RTC.set(t); // set the RTC and the system time to the received value
+ setTime(t);
+ }
+ }
+ digitalClockDisplay();
+ delay(1000);
+}
+
+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);
+}
+
+/* code to process time sync messages from the serial port */
+#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
+
+time_t processSyncMessage() {
+ // return the time if a valid sync message is received on the serial port.
+ 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
+ }
+ }
+ return pctime;
+ }
+ }
+ return 0;
+}
+