summaryrefslogtreecommitdiff
path: root/Time/Examples/TimeRTCLog/TimeRTCLog.pde
diff options
context:
space:
mode:
Diffstat (limited to 'Time/Examples/TimeRTCLog/TimeRTCLog.pde')
-rw-r--r--Time/Examples/TimeRTCLog/TimeRTCLog.pde106
1 files changed, 106 insertions, 0 deletions
diff --git a/Time/Examples/TimeRTCLog/TimeRTCLog.pde b/Time/Examples/TimeRTCLog/TimeRTCLog.pde
new file mode 100644
index 0000000..76ed17d
--- /dev/null
+++ b/Time/Examples/TimeRTCLog/TimeRTCLog.pde
@@ -0,0 +1,106 @@
+/*
+ * TimeRTCLogger.pde
+ * example code illustrating adding and subtracting Time.
+ *
+ * this sketch logs pin state change events
+ * the time of the event and time since the previous event is calculated and sent to the serial port.
+ */
+
+#include <Time.h>
+#include <Wire.h>
+#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t
+
+const int nbrInputPins = 6; // monitor 6 digital pins
+const int inputPins[nbrInputPins] = {2,3,4,5,6,7}; // pins to monitor
+boolean state[nbrInputPins] ; // the state of the monitored pins
+time_t prevEventTime[nbrInputPins] ; // the time of the previous event
+
+void setup() {
+ Serial.begin(9600);
+ setSyncProvider(RTC.get); // the function to sync the time from the RTC
+ for(int i=0; i < nbrInputPins; i++){
+ pinMode( inputPins[i], INPUT);
+ // digitalWrite( inputPins[i], HIGH); // uncomment these lines if
+ // state[i] = HIGH; // pull-up resistors are wanted
+ }
+}
+
+void loop()
+{
+ for(int i=0; i < nbrInputPins; i++)
+ {
+ boolean val = digitalRead(inputPins[i]);
+ if(val != state[i])
+ {
+ time_t duration = 0; // the time since the previous event
+ state[i] = val;
+ time_t timeNow = now();
+ if(prevEventTime[i] > 0)
+ // if this was not the first state change, calculate the time from the previous change
+ duration = duration = timeNow - prevEventTime[i];
+ logEvent(inputPins[i], val, timeNow, duration ); // log the event
+ prevEventTime[i] = timeNow; // store the time for this event
+ }
+ }
+}
+
+void logEvent( int pin, boolean state, time_t timeNow, time_t duration)
+{
+ Serial.print("Pin ");
+ Serial.print(pin);
+ if( state == HIGH)
+ Serial.print(" went High at ");
+ else
+ Serial.print(" went Low at ");
+ showTime(timeNow);
+ if(duration > 0){
+ // only display duration if greater than 0
+ Serial.print(", Duration was ");
+ showDuration(duration);
+ }
+ Serial.println();
+}
+
+
+void showTime(time_t t){
+ // display the given time
+ Serial.print(hour(t));
+ printDigits(minute(t));
+ printDigits(second(t));
+ Serial.print(" ");
+ Serial.print(day(t));
+ Serial.print(" ");
+ Serial.print(month(t));
+ Serial.print(" ");
+ Serial.print(year(t));
+}
+
+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 showDuration(time_t duration){
+// prints the duration in days, hours, minutes and seconds
+ if(duration >= SECS_PER_DAY){
+ Serial.print(duration / SECS_PER_DAY);
+ Serial.print(" day(s) ");
+ duration = duration % SECS_PER_DAY;
+ }
+ if(duration >= SECS_PER_HOUR){
+ Serial.print(duration / SECS_PER_HOUR);
+ Serial.print(" hour(s) ");
+ duration = duration % SECS_PER_HOUR;
+ }
+ if(duration >= SECS_PER_MIN){
+ Serial.print(duration / SECS_PER_MIN);
+ Serial.print(" minute(s) ");
+ duration = duration % SECS_PER_MIN;
+ }
+ Serial.print(duration);
+ Serial.print(" second(s) ");
+}
+