====== 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“); }
Ü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?
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**.