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

#include <HourGlass.h>

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

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

void run (timeout_t msec)
void reset ()
int duration ()
bool rotate (bool st)
timeout_t current (bool st)
timeout_t interval (bool st)
bool check ()
bool state ()

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

PassiveTimer t
bool _state
int _sand
timeout_t _size

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

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

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

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

Пример использования.
Допустим у вас есть сигнал "перегрев"(in_overheating) и вам необходимо выставить какой-то флаг о перегреве (isOverheating), если этот сигнал устойчиво держится в течение 10 секунд, и при этом если сигнал снялся, то вам необходимо как минимум те же 10 секунд, подождать прежде чем "снять" флаг. Для этого удобно использовать данный класс.
    HourGlass hg;
    hg.run(10000); // настраиваем часы на 10 сек..
    
    while( ....)
    {
         hg.rotate(in_overheating); // управляем состоянием песочных часов (прямой или обратный ход).
         isOverheating = hg.check();
    }

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