Периодическое выполнение за длинный период (час, день, неделя)

// Данный код выполняет действия периодически за указанный период
// Нам нужно задать период таймера В МИЛЛИСЕКУНДАХ
// дней*(24 часов в сутках)*(60 минут в часе)*(60 секунд в минуте)*(1000 миллисекунд в секунде)
// (long) обязательно для больших чисел, иначе не посчитает
// можно посчитать на калькуляторе, но какбэ ардуино и есть калькулятор, пусть считает...

unsigned long period_time = (long)5*24*60*60*1000;
// переменная таймера, максимально большой целочисленный тип (он же uint32_t)

unsigned long my_timer;
void setup() {
  my_timer = millis();   // "сбросить" таймер
}
void loop() {
  if ((long)millis() - my_timer > period_time) {
    my_timer = millis();   // "сбросить" таймер
    // набор функций, который хотим выполнить один раз за период
    // бла бла бла
    // ...
  }
}

Ссылка на источник: https://alexgyver.ru/arduino-algorithms/