Skip to content

Instantly share code, notes, and snippets.

@thomasvt1
Created September 16, 2017 16:44
Show Gist options
  • Save thomasvt1/056aa4e69e259fb7eec9d7e257c99f1f to your computer and use it in GitHub Desktop.
Save thomasvt1/056aa4e69e259fb7eec9d7e257c99f1f to your computer and use it in GitHub Desktop.
// Date and time functions using a DS3231 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup () {
#ifndef ESP8266
while (!Serial); // for Leonardo/Micro/Zero
#endif
Serial.begin(9600);
//delay(3000); // wait for console opening
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
DateTime compile = DateTime(F(__DATE__), F(__TIME__));
DateTime set (compile + TimeSpan(0,0,0,6) - TimeSpan(0,2,0,0)); //+6 seconds minus 2 hours (GMT)
rtc.adjust(set);
if (rtc.lostPower()) {
Serial.println("RTC lost power, lets set the time!");
// following line sets the RTC to the date & time this sketch was compiled
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
DateTime compile = DateTime(F(__DATE__), F(__TIME__));
//DateTime toGMT = TimeSpan(0,2,0,0);
//DateTime fix = TimeSpan(0,0,0,7);
DateTime set (compile + TimeSpan(0,0,0,6) - TimeSpan(0,2,0,0)); //+7 seconds minus 2 hours (GMT)
rtc.adjust(set);
//Serial.print(future.second(), DEC);
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2017, 9, 16, 17, 42, 0));
}
}
void loop () {
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print("Since midnight 1/1/1970 = ");
Serial.print(now.unixtime());
Serial.print(" s = ");
Serial.print(now.unixtime() / 86400L);
Serial.println("d");
// calculate a date which is 7 days and 30 seconds into the future
//DateTime future (now + TimeSpan(7,12,30,6));
Serial.println();
delay(3000);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment