Задача : часы на базе DS3231. Хочу установить часы не через скетч Код (C++): rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); А в ручную, кнопкой. Для этого изменяю переменную "час". Как мне ее записать в DS3231 не трогая при этом минуты, секунды, дату? Или RTClib можно записывать только всё сразу?
Для данных часов, есть другая библиотека, где это можно сделать не тревожа остальные парметры. Её описание.
а что, для этого обязательно иметь специальную функцию установки именно часа? Зверь же верно написал - сначала читаем из часов текущее время, меняем в нем что нужно, потом записываем обратно
ТС, сам по себе вопрос задан некорректно. У тебя значение времени в модуле в секундах хранится и обрабатывается. Соответственно ты и записываешь /всегосчитываешь одну переменную типа uint32_t. Т.е. для смены часа тебе нужно из этой переменной вычесть/прибавить 3600сек. А потом послать новое значение на запись
не могли бы мне нубу растолковать , как это будет выглядеть в скетче. я сейчас получаю отдельно час , отдельно минуты, следующим образом: Код (C++): { DateTime now = rtc.now(); hh=now.hour(); mm=now.minute(); //получение времени }
я имел ввиду именно как это на практике должно выглядеть. DateTime RTC_DS3231::now() { Wire.beginTransmission(DS3231_ADDRESS); Wire._I2C_WRITE((byte)0); Wire.endTransmission(); Wire.requestFrom(DS3231_ADDRESS, 7); uint8_t ss = bcd2bin(Wire._I2C_READ() & 0x7F); uint8_t mm = bcd2bin(Wire._I2C_READ()); uint8_t hh = bcd2bin(Wire._I2C_READ()); Wire._I2C_READ(); uint8_t d = bcd2bin(Wire._I2C_READ()); uint8_t m = bcd2bin(Wire._I2C_READ()); uint16_t y = bcd2bin(Wire._I2C_READ()) + 2000; return DateTime(y, m, d, hh, mm, ss);