====== 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**.