Однократный импульс при выполнении условия.
- Войдите на сайт для отправки комментариев
Втр, 05/03/2013 - 23:53
Подскажите , как прописать задачу.
Есть три переменные и цифровой выход LOW на котором должен пройти однократно короткий импульс (500) HIGH при соблюдения условия !
if(digitalRead(15)==LOW&&on_off==0&&tempS2>27.01&&tempS2<100.00)
{
digitalWrite(2,HIGH);
on_off=1;
delay(500);
}
Вставка программного кода в тему/комментарий
Совершенно не понятно чего вы хотите...
так?
Нет!!! ну до этого я бы догодался - ну вобщемто все должно происходить как написано у вас , но оно должно выполниться однократно и игнорировать далее данное условие .
при коде выше светодиод на выходе просто мигает при выполнении условия с частотой delay(500)
а он должен загореться и погаснуть и больше не включаться.
То что находится в фигурных скобках будет выполнено только один раз.
А знаете почему у вас мигает?
Потому что код нужно показывать весь, а не кусочки...
Скорее всего переменная on_off объявлена внутри функции loop().
Так что либо вынесите за пределы функции loop() переменную on_off или обьявите ее так:
Так не пойдет. У вас не выполняется условие только один раз, потому что переменная on_off_AC изменяется в коде ниже при совершенно неизвестных никому кроме вас условиях. К сожалению, экстрасенсы только на ТНТ.
И еще раз повторю вот эту ссылку Вставка программного кода в тему/комментарий.
И естественно, в 1200 строках врядли кто-то будет разбираться. Так что попробуйте как-то локализовать данный кусок кода и разобраться почему он работает не так как вы этого хотите... если не разберетесь, то выкладываите и описывайте что хотите от кода, а лучше пишите подробные комментарии к коду.
Хорошо спасибо !!! попробую.
Элементарная задача для шестого класса.
Используцте переменную "флаг". В условии , по мимо прочего, интересуетесь равен ли флаг 0. Если равен , выполняете действия и присваиваете флагу 1. Если флаг нигде не обнуляется то данное действие больше не произойдет.
Спасибо помогло "flag" , я просто новичек в С++ и не то что в шестом класс , а наверное только в первом - но все туда же.
В сообщении #1 этим flag'ом была переменная on_off.
судя по листингу
При выполнении первого условия вы ставите флаг on_off_AC=1,
Так что когда начинает проверятся третий if, флаг уже установлен, и вы его опять сбрасываете on_off_AC=0
И так по кругу. Вот мерцание и идет.
Точно вы правы , так и есть и когда я ввел еще одну переменную "flag" и не прописал его в третьем условии все встало на свои места. - но третье условие мне необходимо в том виде как есть поэтому дополнительное условие и есть решение моей проблемы.
Спасибо большое ребята !