UniSet  2.2.1
Открытые члены | Защищенные данные
Класс HourGlass

#include <HourGlass.h>

Полный список членов класса

Открытые члены

void run (timeout_t msec)
void reset ()
int duration ()
bool rotate (bool st)
timeout_t current ()
timeout_t interval ()
bool check ()
bool enabled ()
timeout_t amount ()
timeout_t remain ()

Защищенные данные

PassiveTimer t
bool _state
timeout_t _sand
timeout_t _size

Подробное описание

Песочные часы. Класс реализующий логику песочных часов. Удобен для создания задержек на срабатывание и на отпускание (как фильтр от кратковременных изменений) с "накоплением времени". Аналогия с песочными часами:

Выставляете время 'run(msec)'.. устанавливаются в какое-то положение часы 'rotate(true)'... песок сыплется... если весь пересыпался - срабатывает условие 'check()==true'. Если во время работы условие изменилось (часы перевернули в обратную сторону), то уже успевший пересыпаться песок, начинает пересыпаться в обратную сторону. Если опять повернули часы... продолжает сыпаться опять (добвляясь к тому песку, что "не успел" высыпаться обратно). Т.е. до момента срабатывания уже меньше времени чем "полное время" и т.д.

Класс является "пассивным", т.е. требует периодического вызова функции rotate и check, для проверки наступления условия срабатывания.

Пример использования.
Допустим у вас есть сигнал "температура"(in_temp) и вам необходимо выставить какой-то флаг о перегреве (isOverheating). Если температура продержиться выше порога в течение 10 секунд check() станет "true". Если температура станет меньше порога через 6 секунд ("песок начнёт обратно пересыпаться"), а потом опять станет выше, то до срабатывания check() == true уже останется 4 сек, а не 10 сек. Получается, что для срабатывания check()=true сигнал должен не колеблясь держаться больше заданного времени.
    HourGlass hg;
    hg.run(10000); // настраиваем часы на 10 сек..

    while( ....)
    {
         hg.rotate( in_temp > HiTemp ); // управляем состоянием песочных часов (прямой или обратный ход часов).
         isOverheating = hg.check();
    }

Данные класса

timeout_t HourGlass::_sand [protected]

сколько песка ещё осталось..

timeout_t HourGlass::_size [protected]

размер часов

bool HourGlass::_state [protected]

текущее "положение часов", true - прямое, false - обратное (перевёрнутое)

таймер для отсчёта времени..


Объявления и описания членов класса находятся в файле: