Сбрасываются часы DS1307

Всем привет. Сделал схему, написал код - все работает, часы идут. Проходит месяц - часы становятся 00:00 и дальше идут, но время уже не реальное, а от сброшенного, от этого таймеры перестают работать. Перенастроил (без сброса ардуино), снова проходит примерно месяц - опять часы 00:00 и снова идут.

Кусок кода, с setup и loop.

#include <Wire.h>
#include <RTClib.h>
#include <GyverButton.h>
#include <EEPROM.h>

#define segmentA 2
#define segmentB 3
#define segmentC 4
#define segmentD 5
#define segmentE 6
#define segmentF 7
#define segmentG 8
#define segmentDP 9

//задержка вкл/выкл сегментов
int time_delay = 4;

#define DIGIT_1PIN 10  //(1)     //1234
#define DIGIT_2PIN 11  //(2)
#define DIGIT_3PIN 12  //(3)
#define DIGIT_4PIN 13  //(4)

//кнопки
GButton butt1;  //mode
GButton butt2;  //UP
GButton butt3;  //DOWN
GButton butt4;  //SET

//Динамик
#define SPEAKER A1

//РЕЛЕ
int Relay = A2; 

//для RTC
RTC_DS1307 rtc;
    
int hour_new = 0;
int minute_new = 0;
bool settingTime = false;

//Паметры меню
int numMenu = 0; //Выбор меню  0 - ничего не отображать, 1 - отображать часы, 2 - показать час включения, 3 - показать час выключения.
int setnumMenu = 0; //Выбор меню  0 - ничего не отображать, 1 - настройка часов , 2 - настройка часа включения реле, 3 - настройка часа выключения реле


//Таймеры
int onHour = 255; // час включения
int offHour = 255; // час выключения






void setup() {
  pinMode(segmentA, OUTPUT); 
  pinMode(segmentB, OUTPUT);
  pinMode(segmentC, OUTPUT);
  pinMode(segmentD, OUTPUT);
  pinMode(segmentE, OUTPUT);
  pinMode(segmentF, OUTPUT);
  pinMode(segmentG, OUTPUT);
  
  pinMode(DIGIT_1PIN, OUTPUT);
  pinMode(DIGIT_2PIN, OUTPUT);
  pinMode(DIGIT_3PIN, OUTPUT);
  pinMode(DIGIT_4PIN, OUTPUT);

  pinMode(Relay, OUTPUT);

  //Serial.begin(9600);
  Wire.begin();
  rtc.begin();

  //rtc.adjust(DateTime(2023, 8, 30, 22, 07, 0)); // изначальная установка часов.

  onHour = EEPROM.read(0);  // включение реле
  offHour = EEPROM.read(2); // выключение реле
}

void loop() { 
      DateTime now = rtc.now(); 
      int currentHour = now.hour();
      if (onHour==255 || offHour == 255) {digitalWrite(Relay, HIGH);}
      
      //Чтение кнопок
      int analog = analogRead(A7);
        butt1.tick(analog < 100 && analog >= 0);
        butt2.tick(analog < 210 && analog > 150);
        butt3.tick(analog < 330 && analog > 280);
        butt4.tick(analog < 450 && analog > 370);

      switch(numMenu)
      {
        case 0:  if ((numMenu == 0 ) && (setnumMenu == 0)) { display_digits_off(); } break; // выключить дисплей
        case 1:  if ((numMenu == 1 ) && (setnumMenu == 0)) { mode_display_time();  } break; // настройка времени
        case 2:  if ((numMenu == 2 ) && (setnumMenu == 0)) { onHourRelay();  } break; // настройка "часа" включения реле
        case 3:  if ((numMenu == 3 ) && (setnumMenu == 0)) { offHourRelay();  } break; // настройка "часа" выключения реле
      }
      
      if ((numMenu == 1 ) && (setnumMenu == 1)) { setup_time(); }
      if ((numMenu == 2 ) && (setnumMenu == 2)) { editOnHourRelay(); }
      if ((numMenu == 3 ) && (setnumMenu == 3)) { editOffHourRelay(); }


  if (butt1.isClick()) {tone(SPEAKER, 1000, 10); numMenu = numMenu + 1; if (numMenu > 3) {numMenu = 0;}} // меню 1 показать время - Нажата кнопка MODE


  if (currentHour == onHour && onHour < 255) {
    digitalWrite(Relay, LOW);  // Turn on the output
  } else if (currentHour == offHour && offHour < 255) {
    digitalWrite(Relay, HIGH);  // Turn off the output
  }

  
}

Грешу на строчки:

int hour_new = 0;
int minute_new = 0;

Правильно понимаю, что срабатывает reset на контроллере из-за наводок и МК сбрасывается ?? Как сделать так, что бы arduino nano не сбрасывала настройки из-за наводок??? (Блок питания использую заводской от роутера). СПАСИБО

Батарейка в 1307 стоит?

Добрый день. Да.