mirror of
https://github.com/AlexGyver/GyverLamp.git
synced 2025-08-08 00:50:32 +03:00
add
This commit is contained in:
42
firmware/old/GyverLamp_v1.5.4/timer2Minim.h
Normal file
42
firmware/old/GyverLamp_v1.5.4/timer2Minim.h
Normal file
@@ -0,0 +1,42 @@
|
||||
// мини-класс таймера, версия 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();
|
||||
}
|
Reference in New Issue
Block a user