// CONNECTIONS: // DS1302 CLK/SCLK -- > 5 // DS1302 DAT/IO -- > 4 // DS1302 RST/CE -- > 2 // DS1302 VCC -- > 3.3v - 5v // DS1302 GND -- > GND #include
#include
ThreeWire myWire(4, 5, 2); // IO, SCLK, CE RtcDS1302
Rtc(myWire); #define countof(a) (sizeof(a) / sizeof(a[0])) const char data[] = "what time is it"; void setup() { Serial.begin(57600); Serial.print("compiled: "); Serial.print(__DATE__); Serial.println(__TIME__); Rtc.Begin(); RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__); printDateTime(compiled); Serial.println(); if (!Rtc.IsDateTimeValid()) { Serial.println("RTC lost confidence in the DateTime!"); Rtc.SetDateTime(compiled); } if (Rtc.GetIsWriteProtected()) { Serial.println("RTC was write protected, enabling writing now"); Rtc.SetIsWriteProtected(false); } if (!Rtc.GetIsRunning()) { Serial.println("RTC was not actively running, starting now"); Rtc.SetIsRunning(true); } RtcDateTime now = Rtc.GetDateTime(); if (now < compiled) { Serial.println("RTC is older than compile time! (Updating DateTime)"); Rtc.SetDateTime(compiled); } /* comment out on a second run to see that the info is stored long term */ // Store something in memory on the RTC uint8_t count = sizeof(data); uint8_t written = Rtc.SetMemory((const uint8_t*)data, count); // this includes a null terminator for the string if (written != count) { Serial.print("something didn't match, count = "); Serial.print(count, DEC); Serial.print(", written = "); Serial.print(written, DEC); Serial.println(); } /* end of comment out section */ } void loop() { RtcDateTime now = Rtc.GetDateTime(); printDateTime(now); Serial.println(" +"); if (!now.IsValid()) { // Common Causes: // 1) the battery on the device is low or even missing and the power line was disconnected Serial.println("RTC lost confidence in the DateTime!"); } delay(5000); // read data uint8_t buff[20]; const uint8_t count = sizeof(buff); // get our data uint8_t gotten = Rtc.GetMemory(buff, count); if (gotten != count) { Serial.print("something didn't match, count = "); Serial.print(count, DEC); Serial.print(", gotten = "); Serial.print(gotten, DEC); Serial.println(); } Serial.print("data read ("); Serial.print(gotten); Serial.print(") = \""); // print the string, but terminate if we get a null for (uint8_t ch = 0; ch < gotten && buff[ch]; ch++) { Serial.print((char)buff[ch]); } Serial.println("\""); delay(5000); } void printDateTime(const RtcDateTime& dt) { char datestring[20]; snprintf_P(datestring, countof(datestring), PSTR("%02u/%02u/%04u %02u:%02u:%02u"), dt.Month(), dt.Day(), dt.Year(), dt.Hour(), dt.Minute(), dt.Second()); Serial.print(datestring); }