Переполнение millis(). Будет ли нормально работать код, если таймер рассчитан на менее 50 дней?
- Войдите на сайт для отправки комментариев
Обошел кучу сайтов по теме 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 останется сильно высоким и получится, что формула будет вычитать низкие значение минус высокое, а потом сравнивать. То есть, код скорее всего не заработает после переполнения. Я правильно понимаю?))
100500 раз отвечено.
Посмотри, например здесь http://arduino.ru/forum/programmirovanie/arduino-perepolnenie-millis-i-micros и все поймешь
Вычитание переполненного счетчика даст правильную разницу.