Переполнение millis(). Будет ли нормально работать код, если таймер рассчитан на менее 50 дней?

NeXan
Offline
Зарегистрирован: 03.06.2019

Обошел кучу сайтов по теме millis, но нигде не нашел ответ на мой вопрос. На некоторых сайтах говорили, что переполнение нужно только, если таймер рассчитан на более 50 дней. У меня всего 5 минут. Подскажите, нужна ли защита от переполнения или нет?

Написанный мною код ниже. Выключение подсветки по фоторезистору после 5 минут ожидания. А также ее включение при высоком освещении комнаты или нажатии кнопок. Код отлично работает до переполнения, после... не буду же я ждать 60 дней)) Это только участок кода без назначения переменных и loop

    if (flag_BLF == 0 || flag_BLF == 2) {
      if (analogRead(PIN_FT) < 300 || !digitalRead(10) || !digitalRead(11) || !digitalRead(12)) {
        flag_BLF = 1;
        lcd.backlight();
      }
    }
    if (analogRead(PIN_FT) > 350 && flag_BLF == 1) {
      flag_BLF = 2;
      Timer_LCD = millis();
    }
    if (analogRead(PIN_FT) > 350 && (millis() - Timer_LCD >= 300000) && flag_BLF == 2) {
      lcd.noBacklight();
      flag_BLF = 0;
    }

На сколько я понимаю, если millis обнулится, то сохраненное значение в переменной Timer_LCD останется сильно высоким и получится, что формула будет вычитать низкие значение минус высокое, а потом сравнивать. То есть, код скорее всего не заработает после переполнения. Я правильно понимаю?))

Logik
Offline
Зарегистрирован: 05.08.2014

100500 раз отвечено.

mihailkorostele...
Offline
Зарегистрирован: 23.05.2013

Посмотри, например здесь http://arduino.ru/forum/programmirovanie/arduino-perepolnenie-millis-i-micros и все поймешь 

rkit
Offline
Зарегистрирован: 23.11.2016

Вычитание переполненного счетчика даст правильную разницу.