bool RTC_DS3231::setAlarm(uint8_t alarm) { clearAlarm(alarm); uint8_t ctrl = read_i2c_register(DS3231_ADDRESS, DS3231_CONTROL); ctrl |= 0x04; // turn on INTCN ctrl |= alarm; // set bit alarm write_i2c_register(DS3231_ADDRESS, DS3231_CONTROL, ctrl); return true; }
bool RTC_DS3231::clearAlarm(uint8_t alarm) { uint8_t regStatus = read_i2c_register(DS3231_ADDRESS, DS3231_STATUSREG); if(alarm==0) regStatus &= ~0x03; else regStatus &= ~alarm; write_i2c_register(DS3231_ADDRESS, DS3231_STATUSREG, regStatus); return true; }
bool RTC_DS3231::switchClock(bool state) { uint8_t ctrl = read_i2c_register(DS3231_ADDRESS, DS3231_CONTROL); if(state) ctrl |= 0x04; // turn on INTCN else ctrl &= ~0x04; // turn off INTCN write_i2c_register(DS3231_ADDRESS, DS3231_CONTROL, ctrl); return true; }
void init_bl() { // Set up Bluetooth write_i2c_register(BL_WAADR, BL_LCR, 0x80); // 0x80 to program baudrate write_i2c_register(BL_WAADR, BL_DLH, 0x00); // ([14.7456 * 10 ^ 6] / 1) / (115200 * 16) = 8 => 0x0008 write_i2c_register(BL_WAADR, BL_DLL, 0x08); // The desired baud rate is 115200 write_i2c_register(BL_WAADR, BL_LCR, 0x03); // 8 data bit, 1 stop bit, no parity write_i2c_register(BL_WAADR, BL_FCR, 0x06); // reset TXFIFO, reset RXFIFO, non FIFO mode write_i2c_register(BL_WAADR, BL_FCR, 0x01); // enable FIFO mode write_i2c_register(BL_WAADR, BL_IER, 0x01); // enable RHR interrupt }
void RTC_DS3231::writeSqwPinMode(Ds3231SqwPinMode mode) { uint8_t ctrl; ctrl = read_i2c_register(DS3231_ADDRESS, DS3231_CONTROL); ctrl &= ~0x04; // turn off INTCON ctrl &= ~0x18; // set freq bits to 0 if (mode == DS3231_OFF) { ctrl |= 0x04; // turn on INTCN } else { ctrl |= mode; } write_i2c_register(DS3231_ADDRESS, DS3231_CONTROL, ctrl); }
void RTC_DS3231::adjust(const DateTime& dt) { Wire.beginTransmission(DS3231_ADDRESS); Wire._I2C_WRITE((byte)0); // start at location 0 Wire._I2C_WRITE(bin2bcd(dt.second())); Wire._I2C_WRITE(bin2bcd(dt.minute())); Wire._I2C_WRITE(bin2bcd(dt.hour())); Wire._I2C_WRITE(bin2bcd(0)); Wire._I2C_WRITE(bin2bcd(dt.day())); Wire._I2C_WRITE(bin2bcd(dt.month())); Wire._I2C_WRITE(bin2bcd(dt.year() - 2000)); Wire.endTransmission(); uint8_t statreg = read_i2c_register(DS3231_ADDRESS, DS3231_STATUSREG); statreg &= ~0x80; // flip OSF bit write_i2c_register(DS3231_ADDRESS, DS3231_STATUSREG, statreg); }