Вопросы к Поиску с Алисой
Функция millis() не работает в обработчике прерываний, потому что при входе в него запрещаются все прерывания микроконтроллера. mypractic.ru Разрешаются они только при выходе из обработчика. mypractic.ru
За время работы обработчика функция millis() будет возвращать один и тот же результат, потому что прерывания не работают и соответственно не подсчитывается количество переполнений Timer0. forum.amperka.ru Но при следующем вызове прерывания, когда из него выйдут и начнёт работать основная программа, функция millis() вернёт новое значение. forum.amperka.ru
Чтобы решить проблему, можно использовать внешний счётчик времени, например DS1302 или DS1307. arduino.ru
Также для задержек в обработчике прерываний можно применять функцию micros(), но не millis(). arduino.stackexchange.com