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.
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 }
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
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)
.
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
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.