Микросхема DS1337 устроена крайне просто, вся суть её работы сводится в подсчёте времени и хранении этого в памяти, всё что нам нужно это запросить передать нам её содержимое.
void setup() {
RTC.start();// Запуск модуля
Serial.begin(9600);
RTC.setDayOfWeek(5);
RTC.setSeconds(55);
RTC.setMinutes(59);
RTC.setHours(23);
RTC.setDays(25);
RTC.setMonths(10);
RTC.setYears(2019);
RTC.writeTime();
}
void loop() {
RTC.readTime();// Считать данные с датчика
Serial.print(RTC.getDays());
Serial.print("/");
Serial.print(RTC.getMonths());
Serial.print("/");
Serial.print(RTC.getYears());
Serial.print(" ");
Serial.print(RTC.getDayOfWeek());
Serial.print("th day of week ");
Serial.print(RTC.getHours());
Serial.print(":");
Serial.print(RTC.getMinutes());
Serial.print(":");
Serial.print(RTC.getSeconds());
Serial.println();
}
Функция start запускает модуль, так же есть аналогичная функция stop которая останавливает подсчёт времени.
Функциями setDatOfWeek, setSeconds, setMinutes, setHours, setDays, setMonths, setYears мы можем задать время с которого будут считать часы. Обратите внимание что после применения этих функций необходимо вызвать функцию writeTime, которая запишет установленное время в микросхему.
Обратите внимание что функция setDatOfWeek должна принимать число от 1 до 7.
Аналогичными функциями getXXXX мы можем получать данные с датчика, но перед этим необходимо вызвать функцию readTime.
Так же в библиотеке присутствует функция snooze которая позволяет установить время пробуждения в секундах и перейти в режим сна. Изнутри код в библиотеке выглядит следующим образом:
void DS1337::custom_snooze(unsigned long secondsToSnooze) { readTime(); setAlarmRepeat(EVERY_MONTH); writeAlarm(date_to_epoch_seconds() + secondsToSnooze); attachInterrupt(RTC_INT_NUMBER, _dummy_int_handler, FALLING); enable_interrupt(); sleep_enable(); sleep_cpu(); clear_interrupt(); disable_interrupt(); detachInterrupt(RTC_INT_NUMBER); }
Данный код очень хорошо демонстрирует работу с прерываниями и работу с будильником.