LED часы Arduino Nano 3.0, Ds3231,DHT11,MAX7219

Да, это он

P.S. В моём примере #109, как раз есть

В том скетче на который Вы мне ссылку давали?

На такой подход и намекал.

Да. Только прерывание не нужно, достаточно просто reset.
Почитайте немного AVR WD таймер

Спасибо, почитаю

т.е. флаг сбрасывать по таймеру?

Нет, сбрасывать сам таймер, через определённое время. Если не сбросили - значит программа зависла, WD таймер сам запустит перезагрузку ардуинки (ресет).

Как здесь примерно?

#include "GyverWDT.h"
/*
  Пример классического применения watchdog - сброс устройства при зависании
  Если не вызвать Watchdog.reset() вовремя - произойдет сброс
  Зависимость таймаутов от делителей см. в GyverWDT.h
*/
void setup() {
  pinMode(13, OUTPUT);
  Watchdog.enable(RESET_MODE, WDT_PRESCALER_512); // Режим сторжевого сброса , таймаут ~4с
}
void loop() {
  /* Ваш полезный код */
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
   
  Watchdog.reset(); // Переодический сброс watchdog, означающий, что устройство не зависло
}

Да, примерно

С таким кодом получается не будут работать прерывания от RTC, и не получить день недели?
RTClib myRTC; конфликтует с myRTC DS3231;

 DateTime now = myRTC.now();
 seconds = now.second;
 minutes = now.minute;
 hours   = now.year;
 date    = now.day;
 month   = now.month;
 year    = now.year;

Или оставить первый вариант и просто добавить сброс по WD?

Неверно

DateTime now = myRTC.now();
 seconds = now.second();
 minutes = now.minute();
 hours   = now.year();
 date    = now.day();
 month   = now.month();
 year    = now.year();

Скобки не забываем - это функции.

Забыл, спасибо

а как с будильниками тогда?

День недели

now.dayOfTheWeek();

Я с будильниками не работал, но таки привыкайте заглядывать в код библиотек, которыми пользуетесь ))

		// Alarm functions
		
		void getA1Time(byte& A1Day, byte& A1Hour, byte& A1Minute, byte& A1Second, byte& AlarmBits, bool& A1Dy, bool& A1h12, bool& A1PM); 
/* Retrieves everything you could want to know about alarm
 * one. 
 * A1Dy true makes the alarm go on A1Day = Day of Week,
 * A1Dy false makes the alarm go on A1Day = Date of month.
 *
 * byte AlarmBits sets the behavior of the alarms:
 *	Dy	A1M4	A1M3	A1M2	A1M1	Rate
 *	X	1		1		1		1		Once per second
 *	X	1		1		1		0		Alarm when seconds match
 *	X	1		1		0		0		Alarm when min, sec match
 *	X	1		0		0		0		Alarm when hour, min, sec match
 *	0	0		0		0		0		Alarm when date, h, m, s match
 *	1	0		0		0		0		Alarm when DoW, h, m, s match
 *
 *	Dy	A2M4	A2M3	A2M2	Rate
 *	X	1		1		1		Once per minute (at seconds = 00)
 *	X	1		1		0		Alarm when minutes match
 *	X	1		0		0		Alarm when hours and minutes match
 *	0	0		0		0		Alarm when date, hour, min match
 *	1	0		0		0		Alarm when DoW, hour, min match
 */
		void getA2Time(byte& A2Day, byte& A2Hour, byte& A2Minute, byte& AlarmBits, bool& A2Dy, bool& A2h12, bool& A2PM); 
			// Same as getA1Time();, but A2 only goes on seconds == 00.
		void setA1Time(byte A1Day, byte A1Hour, byte A1Minute, byte A1Second, byte AlarmBits, bool A1Dy, bool A1h12, bool A1PM); 
			// Set the details for Alarm 1
		void setA2Time(byte A2Day, byte A2Hour, byte A2Minute, byte AlarmBits, bool A2Dy, bool A2h12, bool A2PM); 
			// Set the details for Alarm 2
		void turnOnAlarm(byte Alarm); 
			// Enables alarm 1 or 2 and the external interrupt pin.
			// If Alarm != 1, it assumes Alarm == 2.
		void turnOffAlarm(byte Alarm); 
			// Disables alarm 1 or 2 (default is 2 if Alarm != 1);
			// and leaves the interrupt pin alone.
		bool checkAlarmEnabled(byte Alarm); 
			// Returns T/F to indicate whether the requested alarm is
			// enabled. Defaults to 2 if Alarm != 1.
		bool checkIfAlarm(byte Alarm); 
			// Checks whether the indicated alarm (1 or 2, 2 default);
			// has been activated.

Тоесть тут они как функции?

Это функции для работы с будильниками

Так актуальнее будет

		// Alarm functions

		void getA1Time(byte& A1Day, byte& A1Hour, byte& A1Minute, byte& A1Second, byte& AlarmBits, bool& A1Dy, bool& A1h12, bool& A1PM);
/* Retrieves everything you could want to know about alarm
 * one.
 * A1Dy true makes the alarm go on A1Day = Day of Week,
 * A1Dy false makes the alarm go on A1Day = Date of month.
 *
 * byte AlarmBits sets the behavior of the alarms:
 *	Dy	A1M4	A1M3	A1M2	A1M1	Rate
 *	X	1		1		1		1		Once per second
 *	X	1		1		1		0		Alarm when seconds match
 *	X	1		1		0		0		Alarm when min, sec match
 *	X	1		0		0		0		Alarm when hour, min, sec match
 *	0	0		0		0		0		Alarm when date, h, m, s match
 *	1	0		0		0		0		Alarm when DoW, h, m, s match
 *
 *	Dy	A2M4	A2M3	A2M2	Rate
 *	X	1		1		1		Once per minute (at seconds = 00)
 *	X	1		1		0		Alarm when minutes match
 *	X	1		0		0		Alarm when hours and minutes match
 *	0	0		0		0		Alarm when date, hour, min match
 *	1	0		0		0		Alarm when DoW, hour, min match
 *
 *	Note: byte AlarmBits is not explicitly cleared for the getAXTime methods to
 *	support sequential retreival of both alarms with the same byte AlarmBits.
 *	Use the flag bool clearAlarmBits=True to explicitly clear byte AlarmBits on
 *  call to getAXTime.
 */
		void getA2Time(byte& A2Day, byte& A2Hour, byte& A2Minute, byte& AlarmBits, bool& A2Dy, bool& A2h12, bool& A2PM);
			// Same as getA1Time();, but A2 only goes on seconds == 00.
		void getA1Time(byte& A1Day, byte& A1Hour, byte& A1Minute, byte& A1Second, byte& AlarmBits, bool& A1Dy, bool& A1h12, bool& A1PM, bool clearAlarmBits);
			// Same as getA1Time();, but clears byte AlarmBits.
		void getA2Time(byte& A1Day, byte& A1Hour, byte& A1Minute,byte& AlarmBits, bool& A1Dy, bool& A1h12, bool& A1PM, bool clearAlarmBits);
			// Same as getA1Time();, but clears byte AlarmBits.
		void setA1Time(byte A1Day, byte A1Hour, byte A1Minute, byte A1Second, byte AlarmBits, bool A1Dy, bool A1h12, bool A1PM);
			// Set the details for Alarm 1
		void setA2Time(byte A2Day, byte A2Hour, byte A2Minute, byte AlarmBits, bool A2Dy, bool A2h12, bool A2PM);
			// Set the details for Alarm 2
		void turnOnAlarm(byte Alarm);
			// Enables alarm 1 or 2 and the external interrupt pin.
			// If Alarm != 1, it assumes Alarm == 2.
		void turnOffAlarm(byte Alarm);
			// Disables alarm 1 or 2 (default is 2 if Alarm != 1);
			// and leaves the interrupt pin alone.
		bool checkAlarmEnabled(byte Alarm);
			// Returns T/F to indicate whether the requested alarm is
			// enabled. Defaults to 2 if Alarm != 1.
		bool checkIfAlarm(byte Alarm);
			// Checks whether the indicated alarm (1 or 2, 2 default);
			// has been activated. Always clears flag.
		bool checkIfAlarm(byte Alarm, bool clearflag);
			// Checks whether the indicated alarm (1 or 2, 2 default);
			// has been activated. IF clearflag is set, clears alarm flag.

А в чем основные отличия работы через DateTime? Кроме получения даты/времени одним числом и за раз?