33 #if defined(__AVR__) || defined(ARDUINO_ARCH_SAM) 34 #include <avr/pgmspace.h> 62 if (regDayWeek & 0xF8) {
145 #ifdef ARDUINO_ARCH_AVR 167 #ifdef ARDUINO_ARCH_AVR 195 if (!
readBuffer(0x00, buffer,
sizeof(buffer))) {
196 memset(dt, 0,
sizeof(
struct tm));
201 memset(dt, 0,
sizeof(
struct tm));
204 dt->tm_sec =
bcdToDec(buffer[0] & 0x7F);
205 dt->tm_min =
bcdToDec(buffer[1] & 0x7F);
206 dt->tm_hour =
bcdToDec(buffer[2] & 0x3F);
207 dt->tm_wday =
bcdToDec(buffer[3] & 0x07);
208 dt->tm_mday =
bcdToDec(buffer[4] & 0x3F);
209 dt->tm_mon =
bcdToDec(buffer[5] & 0x1F);
210 dt->tm_year =
bcdToDec(buffer[6]) + 100;
223 if ((dt->tm_sec > 59) || (dt->tm_min > 59) || (dt->tm_hour > 23) ||
224 (dt->tm_mday < 1) || (dt->tm_mday > 31) || (dt->tm_mon > 11) || (dt->tm_year > 199) ||
250 buffer[0] =
decToBcd(dt->tm_sec) & 0x7F;
251 buffer[1] =
decToBcd(dt->tm_min) & 0x7F;
252 buffer[2] =
decToBcd(dt->tm_hour) & 0x3F;
253 buffer[3] =
decToBcd(dt->tm_wday + 1) & 0x07;
254 buffer[4] =
decToBcd(dt->tm_mday) & 0x3F;
255 buffer[5] =
decToBcd(dt->tm_mon + 1) & 0x1F;
256 buffer[6] =
decToBcd(dt->tm_year % 100);
308 if (!
readBuffer(0x00, buffer,
sizeof(buffer))) {
318 if ((*sec > 59) || (*min > 59) || (*hour > 23)) {
352 uint8_t mday, uint8_t mon, uint16_t year,
363 dt.tm_year = year - 1900;
392 uint8_t *mday, uint8_t *mon, uint16_t *year,
407 *mon = dt.tm_mon + 1;
408 *year = dt.tm_year + 1900;
445 return (uint8_t)(10 * ((bcd & 0xF0) >> 4) + (bcd & 0x0F));
457 return (uint8_t)(((dec / 10) << 4) | (dec % 10));
518 for (uint8_t i = 0; i < writeLen; i++) {
519 Wire.write(((uint8_t *)buffer)[i]);
521 if (Wire.endTransmission(
true) != 0) {
547 if (Wire.endTransmission(
false) != 0) {
551 for (uint8_t i = 0; i < readLen; i++) {
552 ((uint8_t *)buffer)[i] = (uint8_t)Wire.read();
bool read(struct tm *dt)
Read date and time from RTC.
bool readBuffer(uint8_t reg, void *buffer, uint8_t len)
Read buffer from RTC.
uint8_t decToBcd(uint8_t dec)
Decimal to BCD conversion.
bool getDateTime(uint8_t *hour, uint8_t *min, uint8_t *sec, uint8_t *mday, uint8_t *mon, uint16_t *year, uint8_t *wday)
Get date time.
bool write(const struct tm *dt)
Write date and time to RTC.
bool setDateTime(uint8_t hour, uint8_t min, uint8_t sec, uint8_t mday, uint8_t mon, uint16_t year, uint8_t wday)
Set date time.
#define DS1307_ADDR
DS1307 I2C 7-bit address.
#define DS1307_REG_SECONDS
DS1307 registers.
bool setSquareWave(SquareWave squareWave)
Configure SQW (Square Wave) output pin.
#define DS1307_REG_CONTROL
Control register.
uint8_t bcdToDec(uint8_t bcd)
BCD to decimal conversion.
bool getTime(uint8_t *hour, uint8_t *min, uint8_t *sec)
Read time from RTC.
bool setEpoch(time_t t)
Write Unix epoch UTC time to RTC.
SquareWave
Squarewave enum.
DS1307 RTC library for Arduino.
#define DS1307_REG_DAY_WEEK
Day of the week register.
bool writeRegister(uint8_t reg, uint8_t value)
Write register.
#define DS1307_SEC_CH
DS1307 register bit defines.
bool begin()
Initialize and detect DS1307 RTC.
time_t getEpoch()
Read Unix UTC epoch time_t.
bool isRunning()
Read RTC CH (Clock Halt) from seconds register.
bool setTime(uint8_t hour, uint8_t min, uint8_t sec)
Write time to RTC.
uint8_t readRegister(uint8_t reg)
Read register.
bool writeBuffer(uint8_t reg, void *buffer, uint8_t len)
Write buffer to RTC.
bool clockEnable(bool enable=true)
Enable or disable oscillator.