Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

skript:forschleife

For - Schleife : Wiederholtes Ausführen von Befehlen

Mit einer For-Schleife kann Code mehrere Male nacheinander ausgeführt werden. So kann man z.B. mehrere Messungen hintereinander durchführen, mehrere Pins an- oder ausschalten oder einen Roboter mehrere Schritte machen lassen.

Eine schöne Erklärung findet ihr in der Arduino-Referenz: http://arduino.cc/de/Reference/For

Syntax: Was alles rein mus...

Den Grundsätzlichen Aufbau einer for-Schleife in C++ wollen wir an folgendem kleinen Beispielprogramm erklären, welches die Zahlen von 1 bis 5 auf dem Serial Monitor ausgibt:

// dieser vordere Teil kontrolliert den Ablauf.
for (int i=1; i<=5; i++)
{
    //Alles, was hier drin steht, wird immer wieder ausgeführt, solange die Bedingung "i=5" erfüllt ist. 
    Serial.println (i); //hier wird der Wert von i ausgegeben
}

Der "Kontrollteil" der For-Schleife (in den Runden Klammern)

Wie ihr seht, stehen in den runden Klammern drei durch ; getrennte Teile:

1. Der Initialisierungsteil 'int i=1'

Hier wird eine Zählvariable i eingerichtet, die in der Schleife benutzt wird, um die Anzahl der bereits erfolgten Durchläufe zu zählen. In unserem Fall starten wir bei 1. Zählvariablen dürfen einen beliebigen Namen haben und gelten nur innerhalb der Schleife.

2. Die Bedingung 'i<=5'

Solange diese Bedingung erfüllt (true) ist, wird die Schleife ein weiteres Mal durchlaufen. Sonst macht das Programm dahinter weiter. Die Obergrenze (in diesem Fall 5) muss nicht unbedingt eine feste Zahl sein - indem ihr den Schleifenzähler mit einer Variable vergleicht (i<obergrenze) so könnt ihr die Anzahl der Schleifendurchläufe über den Inhalt dieser Variable steuern.

So könnt ihr z.B. mit eurem Roboter eine vorher berechnete Anzahl von Schritten vorwärts gehen.

3. Das 'Inkrement 'i++'

Nach jedem Durchlauf der Scheife wird dieser Codeabschnitt ausgeführt. In unserem (typischen) Beispiel erhöht er der den Zählerstand i um 1. Wenn wir wollten, dass unsere Schleife rückwärts läuft, könnten wir hier z.B. i-- schreiben.

Der ausgeführte Codeblock (in den geschweiften Klammern)

Dieser Code wird in jedem Schleifendurchlauf ausgeführt. Hier packt ihr alles hinein, was nicht unmittelbar der Kontrolle der Anzahl der Durchläufe dient.

If-Bedingungen in For-Schleifen

Manchmal macht es Sinn, eine For-Schleife mit einer If-Bedingung zu kombinieren - z.B. um mehrere Messungen nacheinander durchzuführen und zu untersuchen.

Hier ein kleines Beispiel, welches einen gemessenen Wert über eine Balkenanzeige auf dem Serial Monitor ausgibt:

int balkenGesamt=20;           // So lang soll unsere Anzeige insgesamt sein
int maximalWert=1024;          // Bei diesem Wert soll die Anzeige voll ausgesteuert sein
 
int sensorWert=analogRead(A0); // Messe und merke dir das Ergebnis
 
int balkenAktiv=sensorWert*balkenGesamt/maximalWert; // Errechne die Anzahl der "leuchtenden" Segmente
for (int i=0;i<balkenGesamt;i++){
  // gebe insgesamt stets balkenGesamt Zeichen aus
  if(balkenAktiv>=i){
    // dieser Teil wird ausgeführt, wenn i "auf der linken Seite" der Grenze zwischen "an" und "aus" ist
    Serial.print("*"); //aktive Balkensegmente werden als ein "*" angezeigt
  }else{
    // dieser Teil wird ausgeführt, wenn i "auf der rechten Seite" der Grenze zwischen "an" und "aus" ist
    Serial.print("-"); //inaktive Balkensegmente werden als ein "-" angezeigt
  }
}

Geschachtelte Schleifen

Da der Teil in den geschweiften Klammern prinzipiell alles enthalten kann, was auch sonst irgendwo im Code steht, kann dort auch eine weitere For-Schleife stehen. So kann euer Programm z.B. bequem durch die Zeilen und Spalten eines Pixelbildes gehen und die Pixel eines nach dem anderen anschauen:

for(int y=0;y<hoehe;y++){
  for(int x=0;x<breite;x++){
    ueberpruefePixel(x,y);
  }
}

In einem weiteren Beispiel erstellen wir eine Art Schachbrett:

  boolean isWhite = true; // gibt an, ob ein weisses Feld gezeichnet werden soll
 
  for (int j=0; j<8; j++) {
    for (int i = 0; i < 8; i++) {
      if (isWhite) {
        Serial.print("X ");
      } else {
        Serial.print("O ");
      }
      isWhite = !isWhite; // aendere die Farbe
    }
    Serial.println();
    isWhite = !isWhite; // am Ende der Zeile, aendere die Farbe nochmal
  }

Im Netz

Eine schöne Erklärung findet ihr auch in der Arduino-Referenz: http://arduino.cc/de/Reference/For

skript/forschleife.txt · Zuletzt geändert: 2019/04/24 15:54 von d.golovko