• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Warunek wykonywany raz, jak ?
#1
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ć ?
 
Odpowiedź
#2
Kod:
bool flag;
while(flag==1){

//ciało fuknkcji
if(warunek konca){[flag=1;}
}
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
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
 
Odpowiedź
#4
To zabezpiecz to flagami .
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#5
(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
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości