FLProg
Вход на сайт
Логин:
Пароль:
Мы в VK
Поиск
Статистика


Яндекс.Метрика
Пятница, 09.12.2016, 16:27
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

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


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: support, Сергей 
Форум » Основной » Обсуждение программы FLProg (Не багтрекер, и не хотелки. Делимся опытом!!) » Блокирующий таймер (туплю)
Блокирующий таймер
SirYorik
Дата: Понедельник, 07.03.2016, 14:13 | Сообщение # 1
Лейтенант
Группа: Проверенные
Сообщений: 119
Награды: 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
Генерал-майор
Группа: Проверенные
Сообщений: 480
Награды: 44
Репутация: 32
Статус: Offline
Цитата SirYorik ()
блокирующий таймер
Прикрепления: TimerStop.flp(65Kb)


PC, E8400, 3.5Gb, Win7-32, ver.FLP(portable)
 
SirYorik Дата: Понедельник, 07.03.2016, 19:12 | Сообщение # 3
Лейтенант
Группа: Проверенные
Сообщений: 119
Награды: 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
Майор
Группа: Проверенные
Сообщений: 135
Награды: 4
Репутация: 10
Статус: Offline
Если использование одновиратора необязательно, то блокировку можно сделть элементом "задержка на отключение".
 
rw6cm Дата: Понедельник, 07.03.2016, 19:31 | Сообщение # 5
Генерал-майор
Группа: Проверенные
Сообщений: 480
Награды: 44
Репутация: 32
Статус: Offline
Цитата SirYorik ()
мне нужно разовое присваивание, которое не должно повториться при любых условных данных пока таймер не истёк.
Или я что то не понимаю что вы хотите, но то что выложил, именно это и делает.
По условию стопорит данные пока не истечет таймер.
Сделал пример для проверки все так и работает.
Прикрепления: TimerStop1.flp(77Kb)


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

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