Недавно я задался вопросом: а можно ли сделать таймер на миллис, который будет корректно обходить переполнение millis() и не сбивать период? Можно, сделал:
#define PERIOD 500 uint32_t timer = 0; void loop() { if (millis() - timer >= PERIOD) { // ваше действие do { timer += PERIOD; if (timer < PERIOD) break; // переполнение uint32_t } while (timer < millis() - PERIOD); // защита от пропуска шага } }
Ссылка на источник: https://alexgyver.ru/arduino-algorithms/