Praktische Anwendungen von Schleifen (DO-WHILE, WHILE oder FOR)

4 Antworten

Beispiel:

Lassen Sie eine LED blinken, solange ein Taster betätigt wird

Schleifenform: WHILE

Begründung: Die LED soll dauerhaft blinken, solange der Taster gedrückt wird. Eine WHILE-Schleife eignet sich hierfür, da sie die Bedingung fortlaufend überprüft.

while (digitalRead(tasterPin) == LOW) {
    digitalWrite(ledPin, HIGH);
    delay(500);
    digitalWrite(ledPin, LOW);
    delay(500);
}

Zählen Sie von 3 bis 10 und geben Sie die Zahlen über den seriellen Monitor aus

Schleifenform: FOR

Begründung: Da die Anzahl der Durchläufe bekannt ist, eignet sich eine FOR-Schleife am besten.

for (int i = 3; i <= 10; i++) {
    Serial.println(i);
    delay(500);
}

Du suchst ja die praktische Anwendung der Schleife - ich versuchs mal

--- DO-WHILE ---

  • umgangssprachlich "schwanzgesteuert" weil die Abbruchbedingung erst nach dem ersten Durchlauf geprüft wird
  • die Schleife läuft mindestens einmal (bis die Abbruchbedingung erfüllt ist)

do {

irgendwas();

} while (not ready);

*** WHILE-DO ---

  • umgangssprachlich "kopfgesteuert" weil die Abbruchbedingung vor dem ersten Durchlauf geprüft wird
  • läuft bis die Abbruchbedingung erfüllt ist, aber ggf auch gar nicht

while(not ready) {

irgendwas();

}

*** FOR ***

  • gezählte Wiederholung
  • ob der Zähler automatisch läuft oder ob bzw. wie man die Bedingungen angibt, hängt von der Programmiersprache ab
  • bricht ab, wenn der Zähler die End-Bedingung erfüllt

for(zähler=1;zähler <10;zähler++) {

irgendwas(zähler);

}

*** FOR-Missbrauch (meiner Meinung nach) ***

  • läuft mindestens einmal durch
  • läuft ohne Abbruchbedingung - die muss man programmieren
  • hat keinen sinnvollen Zähler
  • finde ich nicht gut

for(;;) {

irgendwas(sinnloses);

if(ready) { break; }

}

könnte man auch machen mit

#define TRUE (1=1)

while( TRUE ) {

irgendwas();

}

War es das, was du gemeint hast?

Lesen Sie wiederholt einen Sensorwert ein, bis er einen bestimmten Schwellenwert überschreitet

Schleifenform: DO-WHILE

Begründung: Da der Sensorwert mindestens einmal ausgelesen werden muss, bevor die Bedingung überprüft wird, eignet sich die DO-WHILE-Schleife.

int sensorWert;
do {
    sensorWert = analogRead(sensorPin);
    Serial.println(sensorWert);
    delay(500);
} while (sensorWert < schwellenwert);