diff --git a/examples/pcf8563/pcf8563.ino b/examples/pcf8563/pcf8563.ino new file mode 100644 index 0000000..7734e96 --- /dev/null +++ b/examples/pcf8563/pcf8563.ino @@ -0,0 +1,92 @@ +// Date and time functions using a PCF8563 RTC connected via I2C and Wire lib +#include "RTClib.h" + +RTC_PCF8563 rtc; + +char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; + +void setup () { + Serial.begin(115200); + +#ifndef ESP8266 + while (!Serial); // wait for serial port to connect. Needed for native USB +#endif + + if (! rtc.begin()) { + Serial.println("Couldn't find RTC"); + Serial.flush(); + abort(); + } + + if (rtc.lostPower()) { + Serial.println("RTC is NOT initialized, let's set the time!"); + // When time needs to be set on a new device, or after a power loss, the + // following line sets the RTC to the date & time this sketch was compiled + rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); + // 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(2014, 1, 21, 3, 0, 0)); + // + // Note: allow 2 seconds after inserting battery or applying external power + // without battery before calling adjust(). This gives the PCF8523's + // crystal oscillator time to stabilize. If you call adjust() very quickly + // after the RTC is powered, lostPower() may still return true. + } + + // When time needs to be re-set on a previously configured device, the + // following line sets the RTC to the date & time this sketch was compiled + // rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); + // 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(2014, 1, 21, 3, 0, 0)); + + // When the RTC was stopped and stays connected to the battery, it has + // to be restarted by clearing the STOP bit. Let's do this to ensure + // the RTC is running. + rtc.start(); +} + +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, 12 hours and 30 seconds into the future + DateTime future (now + TimeSpan(7,12,30,6)); + + Serial.print(" now + 7d + 12h + 30m + 6s: "); + Serial.print(future.year(), DEC); + Serial.print('/'); + Serial.print(future.month(), DEC); + Serial.print('/'); + Serial.print(future.day(), DEC); + Serial.print(' '); + Serial.print(future.hour(), DEC); + Serial.print(':'); + Serial.print(future.minute(), DEC); + Serial.print(':'); + Serial.print(future.second(), DEC); + Serial.println(); + + Serial.println(); + delay(3000); +} diff --git a/examples/pcf8563_interrupt/pcf8563_interrupt.ino b/examples/pcf8563_interrupt/pcf8563_interrupt.ino new file mode 100644 index 0000000..e05b521 --- /dev/null +++ b/examples/pcf8563_interrupt/pcf8563_interrupt.ino @@ -0,0 +1,89 @@ +// Date and time functions using a PCF8563 RTC connected via I2C and Wire lib +#include "RTClib.h" + +RTC_PCF8563 rtc; + +char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; + +// use D2 for INT0; attach to CLKOUT pin on RTC +const uint8_t INT_PIN = 2; + +// flag to update serial; set in interrupt callback +volatile uint8_t tick_tock = 1; + +// INT0 interrupt callback; update tick_tock flag +void set_tick_tock(void) { + tick_tock = 1; +} + +void setup () { + Serial.begin(115200); + +#ifndef ESP8266 + while (!Serial); // wait for serial port to connect. Needed for native USB +#endif + + + pinMode(INT_PIN, INPUT); // set up interrupt pin + digitalWrite(INT_PIN, HIGH); // turn on pullup resistors + // attach interrupt to set_tick_tock callback on rising edge of INT0 + attachInterrupt(digitalPinToInterrupt(INT_PIN), set_tick_tock, RISING); + + if (! rtc.begin()) { + Serial.println("Couldn't find RTC"); + Serial.flush(); + abort(); + } + + if (rtc.lostPower()) { + Serial.println("RTC is NOT initialized, let's set the time!"); + // When time needs to be set on a new device, or after a power loss, the + // following line sets the RTC to the date & time this sketch was compiled + rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); + // 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(2014, 1, 21, 3, 0, 0)); + // + // Note: allow 2 seconds after inserting battery or applying external power + // without battery before calling adjust(). This gives the PCF8523's + // crystal oscillator time to stabilize. If you call adjust() very quickly + // after the RTC is powered, lostPower() may still return true. + } + + + + // When time needs to be re-set on a previously configured device, the + // following line sets the RTC to the date & time this sketch was compiled + // rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); + // 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(2014, 1, 21, 3, 0, 0)); + + // When the RTC was stopped and stays connected to the battery, it has + // to be restarted by clearing the STOP bit. Let's do this to ensure + // the RTC is running. + rtc.start(); + + // turn on 1Hz clock out, used as INT0 for serial update every second + rtc.writeSqwPinMode(PCF8563_SquareWave1Hz); +} + +void loop () { + + // check if time display should be output + if(tick_tock) { + + DateTime now = rtc.now(); + + char time_format[] = "hh:mm:ss AP"; + char date_format[] = "MM/DD/YYYY"; + + Serial.println(now.toString(time_format)); + Serial.println(now.toString(date_format)); + Serial.println(); + + tick_tock = 0; + + } + +} diff --git a/keywords.txt b/keywords.txt index 470a13f..d3082fe 100644 --- a/keywords.txt +++ b/keywords.txt @@ -11,6 +11,7 @@ TimeSpan KEYWORD1 RTC_DS1307 KEYWORD1 RTC_DS3231 KEYWORD1 RTC_PCF8523 KEYWORD1 +RTC_PCF8563 KEYWORD1 RTC_Millis KEYWORD1 RTC_Micros KEYWORD1 Ds1307SqwPinMode KEYWORD1 @@ -21,6 +22,7 @@ Pcf8523SqwPinMode KEYWORD1 PCF8523TimerClockFreq KEYWORD1 PCF8523TimerIntPulse KEYWORD1 Pcf8523OffsetMode KEYWORD1 +Pcf8563SqwPinMode KEYWORD1 ####################################### # Methods and Functions (KEYWORD2)