Arduino Polska Forum

Pełna wersja: Warunek wykonywany raz, jak ?
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam jako nowy użytkownik
Mam wydaje się mieć banalny problem z językiem Arduino, gdyż zajmuję się nim niezbyt długo.

Jak napisać warunek tj. if(){} który będąc w pętli wykona się tylko raz, dopóki nie zostanie wykonany inny ?

Bardziej fizycznie...4 przyciski 4 diody, gdy wcisnę przycisk pierwszy zapala się dioda pierwsza, i gaśnie.
Ma to robić raz, po czym którykolwiek z 3 przycisków może zostać wciśnięty by zapalić i zgasić diodę, powiedzmy że po jednym cyklu chciałbym "zablokować" ten przycisk aż do wykonania innego z pozostałych warunków. I tak dla każdego, a pisząc zwykły if będzie migać cały czas.

Jak to napisać ?
Kod:
bool flag;
while(flag==1){

//ciało fuknkcji
if(warunek konca){[flag=1;}
}
Nie za bardzo rozumiem jak to wykorzystać, jest za późna godzina na testy, ale jeśli domyślnie mój fragment kodu wygląda tak:
Kod:
if(analogRead(A5)<700)
{
digitalWrite(relay1, HIGH);
delay(delay2);
digitalWrite(relay1, LOW);
delay(delay1);

I to powoduje ciągłe załączanie i wyłączanie przekaźnika zgodnie z pętlą, więc jeśli zrobię to tak ? (nie wiem czy dobrze rozumiem)
Kod:
bool flag;
while(flag==1){
if(analogRead(A5)<700)
{
digitalWrite(relay1, HIGH);
delay(delay2);
digitalWrite(relay1, LOW);
delay(delay1);
//ciało fuknkcji
if(analogRead(A5)//< czy >700?){[flag=1;}
}
To będzie ok ?

Program ma działać na takiej zasadzie, że przysłonienie jednego z 4 fotorezystorów powoduje jedną "akcje" przekaźnika, następnie mogę go sobie trzymać ile mi się podoba a przekaźnik nie ruszy, ruszy dopiero inny przekaźnik gdy przysłonie inny fotorezystor, i ta sama zasada, jedna akcja przekaźnika i koniec.

Obecnie trzymając przysłonięty fotorezystor naturalnie przekaźnik ciągle napiernicza Smile
To zabezpiecz to flagami .
(14-08-2017, 00:29)adix napisał(a): [ -> ]To zabezpiecz to flagami .

Napisałem tak:
Kod:
while(foto1 == 0 && analogRead(A5)<700){
digitalWrite(relay1, HIGH);
delay(delay2);
digitalWrite(relay1, LOW);
delay(delay1);
foto1++;
foto2 = 0;
foto3 = 0;
foto4 = 0;
}

while(foto2 == 0 && analogRead(A4)<700){
digitalWrite(relay2, HIGH);
delay(delay2);
digitalWrite(relay2, LOW);
delay(delay1);
foto1 = 0;
foto2++;
foto3 = 0;
foto4 = 0;
}

while(foto3 == 0 && analogRead(A3)<700){
digitalWrite(relay3, HIGH);
delay(delay2);
digitalWrite(relay3, LOW);
delay(delay1);
foto1 = 0;
foto2 = 0;
foto3++;
foto4 = 0;
}

while(foto4 == 0 && analogRead(A2)<700){
digitalWrite(relay4, HIGH);
delay(delay2);
digitalWrite(relay4, LOW);
delay(delay1);
foto1 = 0;
foto2 = 0;
foto3 = 0;
foto4++;
}
I problem się rozwiązał
Dziękuje za pomoc i pomysł z flagami, dostajesz punkty Wink