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

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

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

Сообщение SirYorik »

как правильно сделать блокирующий таймер (и вообще таймеры запускаемые по условию)
вот такая схема НЕ работает:
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 ));
  if (( ((_gtv2) > (0)) && (!(_gtv1)) )) {
    _gtv3 = 100500;
  }
  _gtv1 = _gen1O;

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

меняем схему сдвигая присваивание вниз:
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 ));
  _gtv1 = _gen1O;
  if (( ((_gtv2) > (0)) && (!(_gtv1)) )) {
    _gtv3 = 100500;
  }

}
сюрприз, таймер по прежнему рвётся, а присваивание полезной нагрузки произойдет только на СЛЕДУЮЩИЙ цикл, в результате нижележащие платы дают не те результаты (уловие случилось - а реакция будет в будущем)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
rw6cm
Полковник
Сообщения: 2299
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир

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

Сообщение rw6cm »

SirYorik писал(а):блокирующий таймер
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Win10-64, FLProg (portable)
SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04 окт 2015, 10:01
Откуда: Томск

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

Сообщение SirYorik »

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

Добавлено (07.03.2016, 19:12)
---------------------------------------------
TOF и одновибратор.
в блокировке использовать только TOF.
тема закрыта
Последний раз редактировалось SirYorik 07 мар 2016, 19:12, всего редактировалось 1 раз.
Airis
Сержант
Сообщения: 175
Зарегистрирован: 24 сен 2015, 07:27

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

Сообщение Airis »

Если использование одновиратора необязательно, то блокировку можно сделть элементом "задержка на отключение".
Аватара пользователя
rw6cm
Полковник
Сообщения: 2299
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир

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

Сообщение rw6cm »

SirYorik писал(а):мне нужно разовое присваивание, которое не должно повториться при любых условных данных пока таймер не истёк.
Или я что то не понимаю что вы хотите, но то что выложил, именно это и делает.
По условию стопорит данные пока не истечет таймер.
Сделал пример для проверки все так и работает.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Win10-64, FLProg (portable)
SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04 окт 2015, 10:01
Откуда: Томск

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

Сообщение SirYorik »

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей