FLProg
Вход на сайт
Логин:
Пароль:
Поиск
...
Статистика
Понедельник, 23.10.2017, 16:43
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: support, Сергей 
Форум » Основной » Обсуждение программы FLProg (Не багтрекер, и не хотелки. Делимся опытом!!) » Блокирующий таймер (туплю)
Блокирующий таймер
SirYorik Дата: Понедельник, 07.03.2016, 14:13 | Сообщение # 1
Майор
Группа: Проверенные
Сообщений: 125
Награды: 2
Репутация: 0
Статус: Offline
как правильно сделать блокирующий таймер (и вообще таймеры запускаемые по условию)
вот такая схема НЕ работает:

она генерит код:
Код
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, следующим снова сброс и так по кругу.

меняем схему сдвигая присваивание вниз:



смотрим код:


Код
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;
  }

}

сюрприз, таймер по прежнему рвётся, а присваивание полезной нагрузки произойдет только на СЛЕДУЮЩИЙ цикл, в результате нижележащие платы дают не те результаты (уловие случилось - а реакция будет в будущем)
Прикрепления: 6743052.jpg(29Kb) · 5852721.jpg(29Kb)
 
rw6cm Дата: Понедельник, 07.03.2016, 16:46 | Сообщение # 2
Генерал-лейтенант
Группа: Проверенные
Сообщений: 921
Награды: 83
Репутация: 66
Статус: Offline
Цитата SirYorik ()
блокирующий таймер
Прикрепления: TimerStop.flp(65Kb)


Win7-32, FLProg (portable)
 
SirYorik Дата: Понедельник, 07.03.2016, 19:12 | Сообщение # 3
Майор
Группа: Проверенные
Сообщений: 125
Награды: 2
Репутация: 0
Статус: Offline
Цитата rw6cm ()
TimerStop.flp(65Kb)
принцип тотже - EN перекрывается сигналом таймера с инверсией.
только полезная нагрузка здесь сам сигнал таймера - а мне этот сигнал вообще не нужен.
мне нужно разовое присваивание, которое не должно повториться при любых условных данных пока таймер не истёк.

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


Сообщение отредактировал SirYorik - Понедельник, 07.03.2016, 19:12
 
Airis Дата: Понедельник, 07.03.2016, 19:13 | Сообщение # 4
Майор
Группа: Проверенные
Сообщений: 165
Награды: 4
Репутация: 13
Статус: Offline
Если использование одновиратора необязательно, то блокировку можно сделть элементом "задержка на отключение".
 
rw6cm Дата: Понедельник, 07.03.2016, 19:31 | Сообщение # 5
Генерал-лейтенант
Группа: Проверенные
Сообщений: 921
Награды: 83
Репутация: 66
Статус: Offline
Цитата SirYorik ()
мне нужно разовое присваивание, которое не должно повториться при любых условных данных пока таймер не истёк.
Или я что то не понимаю что вы хотите, но то что выложил, именно это и делает.
По условию стопорит данные пока не истечет таймер.
Сделал пример для проверки все так и работает.
Прикрепления: TimerStop1.flp(77Kb)


Win7-32, FLProg (portable)
 
SirYorik Дата: Понедельник, 07.03.2016, 21:09 | Сообщение # 6
Майор
Группа: Проверенные
Сообщений: 125
Награды: 2
Репутация: 0
Статус: Offline
вместо одновибратора надо использовать TOF - тогда работает
 
Форум » Основной » Обсуждение программы FLProg (Не багтрекер, и не хотелки. Делимся опытом!!) » Блокирующий таймер (туплю)
Страница 1 из 11
Поиск:

FLProg © 2017
Яндекс.Метрика