|
- /*
- * TimeRTCLogger.ino
- * 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 <TimeLib.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);
- // uncomment these lines if pull-up resistors are wanted
- // pinMode( inputPins[i], INPUT_PULLUP);
- // state[i] = HIGH;
- }
- }
-
- 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 = 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) ");
- }
|