Недавно я задался вопросом: а можно ли сделать таймер на миллис, который будет корректно обходить переполнение 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/