Выход из цикла voidloop

lev39
Offline
Зарегистрирован: 14.08.2012

Нужно решить простую проблему.

Зажечь лампу.

Погорела некоторе время (delay) и погасла на совсем.

Т.е. надо выйти из цикла voidloop.

Подскажи как ?

Спасибо.

Zizilk
Offline
Зарегистрирован: 30.05.2013

никак это можно сказать "железный"

Решается следующим способом, выносишь код, который включает и выключает лампу с задержкой в отдельную функцию и вызываешь по необходимому условию.

Если надо чтобы вообще только один раз сработала то делаешь переменную глобальную, в которой фиксируешь срабатывание. и дополняешь твоё условие критерием чтобы эта переменная была "несработавшей."

Клапауций
Offline
Зарегистрирован: 10.02.2013

Зажечь лампу. - delay = время

Погорела некоторе время (delay) и погасла на совсем. - delay = 0

Т.е. надо выйти из цикла voidloop. - не нужно никуда выходить.

lev39
Offline
Зарегистрирован: 14.08.2012

Не работает.

При вводе delay = 0 дает ошибку.

А если после гашения delay(0), то естестственно не гасится, а постояноо повторяется горение с первонычальным Delay.

Looka
Offline
Зарегистрирован: 24.04.2012

Зажигайте и тушите в setup(); 

Zizilk
Offline
Зарегистрирован: 30.05.2013

Zizilk пишет:

никак это можно сказать "железный"

Решается следующим способом, выносишь код, который включает и выключает лампу с задержкой в отдельную функцию и вызываешь по необходимому условию.

Если надо чтобы вообще только один раз сработала то делаешь переменную глобальную, в которой фиксируешь срабатывание. и дополняешь твоё условие критерием чтобы эта переменная была "несработавшей."

maksim
Offline
Зарегистрирован: 12.02.2012

delay(∞); * - что эквивалентно while(1);

lev39
Offline
Зарегистрирован: 14.08.2012

Looka ! Спасибо ! Все в порядке !

Клапауций
Offline
Зарегистрирован: 10.02.2013

lev39 пишет:

Не работает.

При вводе delay = 0 дает ошибку.

А если после гашения delay(0), то естестственно не гасится, а постояноо повторяется горение с первонычальным Delay.

а, delay = время - работает? :D

имелось ввиду так - рулим значением делау, когда = 0, то ничего не делаем, когда > 0, то что-то делаем один раз.

int d = 100;

void setup() {
pinMode(14, OUTPUT);
digitalWrite(14, HIGH);
}

void loop() {
if (d != 0) {digitalWrite(14, LOW); delay(d); digitalWrite(14, HIGH); d = 0;}
}

 

lev39
Offline
Зарегистрирован: 14.08.2012

 

Спасибо Клапауций.

Отличный вариант.