This commit is contained in:
Alex
2019-11-14 14:17:02 +03:00
parent 4ae5b205fc
commit 08c6eb6d7b
24 changed files with 1649 additions and 0 deletions

View 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();
}