Arduino If Schleife unterbrechen?

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 ;)

oio56789 
Fragesteller
 27.06.2021, 22:13

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.

0
iEdik  28.06.2021, 18:55
@oio56789

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/

0
oio56789 
Fragesteller
 30.06.2021, 17:47
@iEdik

Habe versucht es mit do...while zu machen aber es läuft ständig durch. Könntest du mir genau erklären WIE ich es schreiben sollte damit es klappt. Bin noch Anfänger mit Arduino. Aber danke für deine Hilfe :)

0

Was ist eine "if-Schleife"?

Wie sieht denn dein Code ungefähr aus?

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
oio56789 
Fragesteller
 27.06.2021, 21:56

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.

0
MrAmazing2  27.06.2021, 22:10
@oio56789

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.

1
oio56789 
Fragesteller
 27.06.2021, 22:15
@MrAmazing2

Danke für die Antwort werd ich ausprobieren:)

0

Einfach ein if ausenrum machen? Also if "schalter gedrückt"

Woher ich das weiß:Berufserfahrung – Jahrelange Berufserfahrung