Блокирующий таймер

В этом форуме можно обсудить интерфейс программы, работу встроенных блоков, взаимодейсткие с Ардуино IDE и т.д.
Ответить
SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04.10.2015{, 10:01}
Репутация: 0
Откуда: Томск

Блокирующий таймер

#1

Сообщение SirYorik » 07.03.2016{, 14:13}

как правильно сделать блокирующий таймер (и вообще таймеры запускаемые по условию)
вот такая схема НЕ работает:
5852721.jpg
она генерит код:

Код: Выделить всё

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;

}
из которого видно, что таймер никогда не достигнет нужной длительности, следющим циклом он  сбросится (входом EN), следующим снова запустится и произойдет присваивание 100500, следующим снова сброс и так по кругу.

меняем схему сдвигая присваивание вниз:
6743052.jpg
смотрим код:



Код: Выделить всё

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;
  }

}
сюрприз, таймер по прежнему рвётся, а присваивание полезной нагрузки произойдет только на СЛЕДУЮЩИЙ цикл, в результате нижележащие платы дают не те результаты (уловие случилось - а реакция будет в будущем)

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Блокирующий таймер

#2

Сообщение rw6cm » 07.03.2016{, 16:46}

SirYorik писал(а):блокирующий таймер
Вложения
TimerStop.flp
(64.89 КБ) 102 скачивания
Win10-64, FLProg (portable)

SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04.10.2015{, 10:01}
Репутация: 0
Откуда: Томск

Блокирующий таймер

#3

Сообщение SirYorik » 07.03.2016{, 19:12}

rw6cm писал(а):TimerStop.flp(65Kb)
принцип тотже - EN перекрывается сигналом таймера с инверсией.
только полезная нагрузка здесь сам сигнал таймера - а мне этот сигнал вообще не нужен.
мне нужно разовое присваивание, которое не должно повториться при любых условных данных пока таймер не истёк.

Добавлено (07.03.2016, 19:12)
---------------------------------------------
TOF и одновибратор.
в блокировке использовать только TOF.
тема закрыта
Последний раз редактировалось SirYorik 07.03.2016{, 19:12}, всего редактировалось 1 раз.

Airis
Сержант
Сообщения: 175
Зарегистрирован: 24.09.2015{, 07:27}
Репутация: 0

Блокирующий таймер

#4

Сообщение Airis » 07.03.2016{, 19:13}

Если использование одновиратора необязательно, то блокировку можно сделть элементом "задержка на отключение".

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Блокирующий таймер

#5

Сообщение rw6cm » 07.03.2016{, 19:31}

SirYorik писал(а):мне нужно разовое присваивание, которое не должно повториться при любых условных данных пока таймер не истёк.
Или я что то не понимаю что вы хотите, но то что выложил, именно это и делает.
По условию стопорит данные пока не истечет таймер.
Сделал пример для проверки все так и работает.
Вложения
TimerStop1.flp
(77.2 КБ) 82 скачивания
Win10-64, FLProg (portable)

SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04.10.2015{, 10:01}
Репутация: 0
Откуда: Томск

Блокирующий таймер

#6

Сообщение SirYorik » 07.03.2016{, 21:09}

вместо одновибратора надо использовать TOF - тогда работает

Ответить

Вернуться в «Обсуждение программы FLProg (Не багтрекер, и не хотелки. Делимся опытом!!)»