Блокирующий таймер
Добавлено: 07.03.2016{, 14:13}
как правильно сделать блокирующий таймер (и вообще таймеры запускаемые по условию)
вот такая схема НЕ работает: она генерит код:
из которого видно, что таймер никогда не достигнет нужной длительности, следющим циклом он сбросится (входом EN), следующим снова запустится и произойдет присваивание 100500, следующим снова сброс и так по кругу.
меняем схему сдвигая присваивание вниз:
смотрим код:
сюрприз, таймер по прежнему рвётся, а присваивание полезной нагрузки произойдет только на СЛЕДУЮЩИЙ цикл, в результате нижележащие платы дают не те результаты (уловие случилось - а реакция будет в будущем)
вот такая схема НЕ работает: она генерит код:
Код: Выделить всё
bool _gtv1 = 0; //ВРЕМЯ_БЛОКИРОВКИ
int _gtv2 = 10; //НЕКОЕ_УСЛОВИЕ
long _gtv3 = 0; //ЛЮБАЯ_РАБОТА_НИЖЕ_ПО_СХЕМЕ
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
void setup()
{
}
void loop()
{
if (( ((_gtv2) > (0)) && (!(_gtv1)) )) {
if (! _gen1I) {
_gen1I = 1;
_gen1O = 1;
_gen1P = millis();
}
} else {
_gen1I = 0 ;
_gen1O = 0;
}
if (_gen1I && _gen1O) _gen1O = !( _isTimer( _gen1P , 100 ));
if (( ((_gtv2) > (0)) && (!(_gtv1)) )) {
_gtv3 = 100500;
}
_gtv1 = _gen1O;
}
меняем схему сдвигая присваивание вниз:
смотрим код:
Код: Выделить всё
bool _gtv1 = 0; //ВРЕМЯ_БЛОКИРОВКИ
int _gtv2 = 10; //НЕКОЕ_УСЛОВИЕ
long _gtv3 = 0; //ЛЮБАЯ_РАБОТА_НИЖЕ_ПО_СХЕМЕ
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
void setup()
{
}
void loop()
{
if (( ((_gtv2) > (0)) && (!(_gtv1)) )) {
if (! _gen1I) {
_gen1I = 1;
_gen1O = 1;
_gen1P = millis();
}
} else {
_gen1I = 0 ;
_gen1O = 0;
}
if (_gen1I && _gen1O) _gen1O = !( _isTimer( _gen1P , 100 ));
_gtv1 = _gen1O;
if (( ((_gtv2) > (0)) && (!(_gtv1)) )) {
_gtv3 = 100500;
}
}