mirror of
https://github.com/AlexGyver/GyverLamp.git
synced 2025-08-07 16:40:32 +03:00
43 lines
1.5 KiB
C++
43 lines
1.5 KiB
C++
// мини-класс таймера, версия 2.0
|
||
// использован улучшенный алгоритм таймера на millis
|
||
// алгоритм чуть медленнее, но обеспечивает кратные интервалы и защиту от пропусков и переполнений
|
||
|
||
class timerMinim
|
||
{
|
||
public:
|
||
timerMinim(uint32_t interval); // объявление таймера с указанием интервала
|
||
void setInterval(uint32_t interval); // установка интервала работы таймера
|
||
boolean isReady(); // возвращает true, когда пришло время. Сбрасывается в false сам (AUTO) или вручную (MANUAL)
|
||
void reset(); // ручной сброс таймера на установленный интервал
|
||
|
||
private:
|
||
uint32_t _timer = 0;
|
||
uint32_t _interval = 0;
|
||
};
|
||
|
||
timerMinim::timerMinim(uint32_t interval) {
|
||
_interval = interval;
|
||
_timer = millis();
|
||
}
|
||
|
||
void timerMinim::setInterval(uint32_t interval) {
|
||
_interval = (interval == 0) ? 1 : interval; // защита от ввода 0
|
||
}
|
||
|
||
boolean timerMinim::isReady() {
|
||
uint32_t thisMls = millis();
|
||
if (thisMls - _timer >= _interval) {
|
||
do {
|
||
_timer += _interval;
|
||
if (_timer < _interval) break; // переполнение uint32_t
|
||
} while (_timer < thisMls - _interval); // защита от пропуска шага
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
void timerMinim::reset() {
|
||
_timer = millis();
|
||
}
|