Микросхема DS1337 устроена крайне просто, вся суть её работы сводится в подсчёте времени и хранении этого в памяти, всё что нам нужно это запросить передать нам её содержимое.

  1. void setup() {
  2.   RTC.start();// Запуск модуля
  3.   Serial.begin(9600);
  4.   RTC.setDayOfWeek(5);
  5.   RTC.setSeconds(55);
  6.   RTC.setMinutes(59);
  7.   RTC.setHours(23);
  8.   RTC.setDays(25);
  9.   RTC.setMonths(10);
  10.   RTC.setYears(2019);
  11.   RTC.writeTime();
  12. }
  13.  
  14. void loop() {
  15.   RTC.readTime();// Считать данные с датчика
  16.   Serial.print(RTC.getDays());
  17.   Serial.print("/");
  18.   Serial.print(RTC.getMonths());
  19.   Serial.print("/");
  20.   Serial.print(RTC.getYears());
  21.   Serial.print("  ");
  22.   Serial.print(RTC.getDayOfWeek());
  23.   Serial.print("th day of week  ");
  24.   Serial.print(RTC.getHours());
  25.   Serial.print(":");
  26.   Serial.print(RTC.getMinutes());
  27.   Serial.print(":");
  28.   Serial.print(RTC.getSeconds());
  29.   Serial.println();
  30. }

Функция 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); 
 
}

Данный код очень хорошо демонстрирует работу с прерываниями и работу с будильником.