faecher:nwt:arduino:lernbaustein1:while_schleife:start

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.

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

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

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.
  • faecher/nwt/arduino/lernbaustein1/while_schleife/start.txt
  • Zuletzt geändert: 14.09.2020 19:14
  • von sbel