Wiederholungen mit while

Die while-Anweisung funktioniert ähnlich wie die if-Anweisung. Allerdings geht es bei while nicht nur darum, ob eine Anweisung oder ein ganzer Block ausgeführt wird, sondern auch, ob sie wiederholt wird – wie bei einer for Schleife.

Eine while-Schleife ist also eine „bedingte Wiederholung“, bei der die Zahl der Wiederholung durch eine logische Bedingung formuiert wird, eine for-Schleife eine „gezählte Wiederholung“, bei der die Zahl der Wiederholungen bereits im Schleifenkopf festgelegt wird.

while(i<100) { tone(10,i); i=i+1; }

Nur wenn der logische Ausdruck (hier „i<100“) „wahr“ ist, wird der Anweisungsblock durchgeführt und dann solange wiederholt, bis der Ausdruck nicht mehr wahr ist.

Task 1

Wie wird das folgende Programm ablaufen? Kommt das Programm jemals bis zum Unterprogramm loop()?

int x=1; void setup(){ while(x<100) { Serial.println(x); x=x+1; } while(2<5) { Serial.print(“!“); } } void loop(){ //loop }

Task 2

Hier ist ein Taster an Pin 4 angeschlossen. Was bewirken die beiden leeren While-Schleifen? Was macht das Programm?

void setup() { Serial.begin(9600); } void loop() { while(digitalRead(4)==1) { } Serial.print(“von jetzt“); while(digitalRead(4)==0){ } Serial.print(“bis jetzt“); }

Logische Ausdrücke Übrigens kann man im mathematischen Ausdruck von if() und while() auch mehrere Bedingungen mit einander verknüpfen: if (w<100 && u==3) bedeutet, dass der if-Block nur ausgeführt wird, wenn w kleiner als 100 und auch u gleich 3 ist. Die beiden &-Zeichen müssen ohne Leerzeichen geschrieben werden – ebenso wie hier die beiden „Pipes“, die für ein „oder“ stehen: if (p<10 || p>30). Der Block wird ausgeführt, wenn p kleiner als 10 oder p größer als 30 ist. Falsch wäre: if(p<10 || >30).

Task 3

Finetuning: Für diese Aufgabe benötigst du zwei Taster und einen Lautsprecher. Immer, wenn man den einen Taster betätigt, soll der Ton um 1 Hz höher werden. Immer wenn man den anderen Taster betätigt, soll er um 1 Hz niedriger werden. Wie kannst du zusätzlich mit einer while-Schleife verhindern, dass man pro Tastendruck mehr als ein Hertz an Frequenzänderung auslöst?

Häufiger Fehler Es ist ein häufiger Fehler, unbeabsichtigt eine while()-Schleife so zu programmieren, dass der mathematische Ausdruck nie unwahr wird. Dann hängt das Programm für immer in dieser Schleife fest - man nennt das eine Endlosschleife.