Arduino If Schleife unterbrechen?
Wie kann ich eine If Schleife unterbrechen, wenn der Schalter gedrückt wird und dann die andere If Schleife ausführen. Ich habe das Problem, dass wenn ich den Schalter drücke erst die andere Schleife durchläuft bevor die eigentliche Aktion ausgeführt wird.
Kann mir jemand helfen?
Danke im Voraus
5 Antworten
Hallo,
Dein Code wäre mal hier hilfreich, um dir zu helfen :)
wie meinst du if-schleife unterbrechen? ..wenn -dann -schleifen werden ja erst "aktiv" wenn bedingungen erfüllt werden..
aber wenn du variablen auf bestimmten wert setzt, die if-schleife anfängt, kannst du in der if-schleife die bedingungen einer variable verändern, sodass beim nächsten durchlauf die if-schleife nicht mehr erfüllt wird..
z.B.
===========Setup==========
M=0
N=1
=======Loop================
if(M==0 &&N==1){
M=1;
}
das ganze wird dann nur einmal im Loop ausgeführt..es seidenn du änderst irgendwo die variable M wieder auf 0 ;)
ahh, du hast mehrere delays drin, 1,5 sekunden insgesamt..also ja sobald du drückst wird zuerst das Face und die delays abgearbeitet..da ist das problem.
benutze doch do ... while schleife für das face wo du keinen eigenes void mehr brauchst, sondern nach else if das ganze reinkopierst. und VOR derlays kannst ja nochmals den taster abfragen als if und dort das wort break benutzen, dann wird auch die do while schleife aufhören.
https://www.arduino.cc/reference/de/language/structure/control-structure/break/
Hey,
dies kannst du ganz einfach durch einen interup lösen
Gruß JO
Edit: https://www.arduino.cc/reference/de/language/functions/external-interrupts/attachinterrupt/
Interrupt haste falsch geschrieben :D
Aber ich denke auch, dass das ist, was er sucht.
Was ist eine "if-Schleife"?
Wie sieht denn dein Code ungefähr aus?
Ich habe auf einen LCD Display etwas geprintet, was aber zu lange braucht um aufzuhören, sodass der Befehl ausgeführt werden kann, den ich möcht wenn ich einen Schalter drücke , also wenn ich diesen Schalter drücke soll der Befehl ausgeführt werden UND das geprintete (bzw die Schleife dazu) unterbrochen werden.
Ich denke Interruptions sind da die Lösung, siehe Antwort von PIIPAAPO.
Aber wenn das printen in einer Schleife ist kannst du die auch einfach mit break; die Schleife abbrechen:
while(...) {
//printen
if(/* Schalter gedrückt */) {
break; //Schleife abbrechen
}
}
Kenn mich leider mit Arduino nich so aus, aber so ginge es im Prinzip.
Danke für die Antwort werd ich ausprobieren:)
Einfach ein if ausenrum machen? Also if "schalter gedrückt"
void setup() {
Lcd.init();
pinMode(btnPin, INPUT_PULLUP);
Lcd.clear();
Lcd.backlight();
}
void loop() {
currentState = digitalRead(btnPin);
if (currentState == LOW) {
dice();
}
else if (currentState == HIGH) {
face();
}
delay(10);
}
void dice() {
Lcd.clear();
Lcd.setCursor(4, 0);
Lcd.print("Zahl:");
long x = random(1, 7);
Lcd.print(x);
delay(1000);
if (x >= 4) {
Lcd.clear();
Lcd.print("Gewonnen!");
gamesWon++;
}
else {
Lcd.clear();
Lcd.print(insults[random(0,4)]);
gamesLost++;
}
delay(1000);
Lcd.clear();
Lcd.print(String("Gewonnen:") + String(gamesWon));
Lcd.setCursor(0, 1);
Lcd.print(String("Verloren:") + String(gamesLost));
delay(1000);
}
void face() {
Lcd.clear();
Lcd.setCursor(4, 0);
Lcd.print("*");
Lcd.setCursor(10, 0);
Lcd.print("*");
Lcd.setCursor(6, 1);
Lcd.print("___");
delay(1000);
Lcd.setCursor(4, 0);
Lcd.print("-");
Lcd.setCursor(10, 0);
Lcd.print("-");
Lcd.setCursor(6, 1);
Lcd.print("___");
delay(500);
Lcd.setCursor(4, 0);
Lcd.print("*");
Lcd.setCursor(10, 0);
Lcd.print("*");
Lcd.setCursor(6, 1);
Lcd.print("___");
}
Hier ist der Code (ab void Setup)
Es ist eine Art Würfelspiel auf einem LCD Display, bevor gewürfelt wird also Schalter betätigt wird ein kleines "Gesicht" aus (** und __ & -- und __) angezeigt, wenn man aber Würfeln will bleibt dieses Gesicht seine Zeit, also würde ich gerne Wissen, wie man diese Schleife unterbrechen kann.