Arduino Tutorial: Die for- Schleife und Arrays

Der Code im Kapitel: Der prellende Taster war viel zu umständlich, deshalb zeige ich dir nun 2 neue Ansatzmöglichkeiten um den Code zu verbessern. Dazu bauen wir die selbe Schaltung wieder auf.

Was benötigst du?

  • 1 x Arduino Uno
  • 1 x USB Kabel
  • 1 x Steckbrett
  • 8 x LED
  • 8 x Ohmscher Widerstand (220 Ohm)
  •  Jump Wire (Männlich)

Wie sieht die Schaltung aus?

Der Code

//Die Anleitung findest du unter: https://www.mymakerstuff.de/arduinotutorial-for-schleife-und-arrays/

int led[]={13,12,11,10,9,8,7,6};                          // Variablenvektor für die LEDs

int button = 4;                                           // Variable für Taster
int buttonStatus = 1;                                     // Information, ob Taster gedrückt oder nicht
int buttonStatusAlt = 1;                                  // Hier ist die vorherige Information des Tasters gespeichert
int zaehler = 0;                                          // Zählt wie oft auf den Taster gedrückt wurde

void setup() {
 
  pinMode(led[0], OUTPUT);                                //
  pinMode(led[1], OUTPUT);                                //
  pinMode(led[2], OUTPUT);                                //
  pinMode(led[3], OUTPUT);                                //
  pinMode(led[4], OUTPUT);                                // LEDs als Ausgang definieren
  pinMode(led[5], OUTPUT);                                //
  pinMode(led[6], OUTPUT);                                //
  pinMode(led[7], OUTPUT);                                //

  pinMode(button, INPUT);                                 // Taster als Eingang definieren
  digitalWrite(button, HIGH);                             // Pull- Up- Widerstand aktivieren

  digitalWrite(led[0], LOW);                              //
  digitalWrite(led[1], LOW);                              //
  digitalWrite(led[2], LOW);                              //
  digitalWrite(led[3], LOW);                              //
  digitalWrite(led[4], LOW);                              // Alle LEDs ausschalten
  digitalWrite(led[5], LOW);                              //
  digitalWrite(led[6], LOW);                              //
  digitalWrite(led[7], LOW);                              //

}

void loop() {
  buttonStatus = digitalRead(button);                    // Prüfe, ob Taster gedrückt oder nicht
  if(buttonStatusAlt != buttonStatus)                    // Wenn der alte Status nicht gleich dem neuen Status ist
  {
    buttonStatusAlt = buttonStatus;                      // Speichere den neuen Status ab
      if (buttonStatus == LOW)                           // Und wenn der Taster gedrückt wurde
      {
        for (int index= 0; index <= 7; index++)          // Prüfe den Wert vom Zähler (insgesamt 8 mal)
        {
           if (zaehler == 0)                             // Wenn der Zähler gleich null ist
           {
              digitalWrite(led[7], LOW);                 // Mache die 8. LED aus und die erste LED an
              digitalWrite(led[index], HIGH);
              delay(200);                                // Warte 200 Millisekunden
              break;                                     //Breche die Schleife ab
           }   else
           {                                             //Wenn der Zähler nicht 0 ist
              if( index == zaehler)                      // Und der Index = dem Zähler ist
              {
                 digitalWrite(led[index-1], LOW);        // Mache die LED aus und die nächste LED an
                 digitalWrite(led[index], HIGH);
                 delay(200);                             // Warte 200 Millisekunden
                 if (zaehler == 7)                       // Wenn der Zähler schon bei der letzten LED ist, also gleich 7
                 {
                    zaehler = -1;                        // Setze den Zähler zurück auf 0
                 }
                 break;                                  //Breche die Schleife ab
              }
           }
        }
         zaehler++;                                      // Erhöhe den Zähler um
      }
  }
}

Den Sketch kannst du auch hier herunterladen:

Download
Der Sketch
Das ist der Sketch für das Projekt: Arduinotutorial: for- Schleife und Arrays
dieForSchleifeUndArrays.ino
Text Dokument 3.7 KB

Code Review

int led[]={13,12,11,10,9,8,7,6};                          // Variablenvektor für die LEDs

 

Wenn du mehrere Variablen hast, die einer Gruppe zuzuordnen sind, kannst du sie in einen Array definieren. Im letzten Kapitel haben wir für 8 LEDs jeweils eine Variable definiert. Diese Variablen waren sich von dem Namen her ähnlich. Außerdem konnte man sie einer Gruppe zuordnen. Deshalb ist hier ein Array sinnvoll. Ein Array kann man auch als Vektor oder Feld bezeichnen.

Wenn wir einen Array so definieren, werden insgesamt 8 Variablen erstellt, die den Namen "led[Zahl]" haben. In diesen Beispiel können wir für "Zahl" die Zahlen von 0 bis 7 auswählen. Die erste Variable ist somit led[0] und hat die Zahl 13 abgespeichert. Die letzte Variable hat den Namen "led[7]" und hat die Zahl 6 abgespeichert. 

 

for (int index= 0; index <= 7; index++)          // Prüfe den Wert vom Zähler (insgesamt 8 mal)

{

   Anweisung1

}

Anweisung2

 

Das ist eine for- Schleife. Die Anweisung zwischen den geschweiften Klammern werden so oft wiederholt, wie du es den Mikrocontroller mitteilst. Dazu definierst du eine Variable. (Hier "int index") Diese Variable setzen wir gleichzeitig = 0 und beenden die Definition mit einem Semikolon. Danach sagst du wie oft die Anweisung ausgeführt wird. Die Anweisung soll hier 8 mal, da acht LEDs, ausgeführt werden. Also Schreiben wir "index <= 7;" Hier heißt das: " Die Schleife soll wieder ausgeführt werden, wenn index kleiner oder gleich 7 ist. Nach dem Semikolon ( ; ) sagen wir noch wie sich die Variable index verändern soll, nachdem die Anweisung in den geschweiften Klammern ausgeführt wurde. In dem Beispiel lassen wir den index um 1 erhöhen "index ++".

Am Anfang ist index = 0. Die Anweisungen in der geschweiften Klammer werden ausgeführt. Danach wird index um 1 erhöht, also ist index = 1. Jetzt wird überprüft ob index kleiner oder gleich 7 ist. Hier ist index gleich 1. 1 ist kleiner als 7. Also wird die Anweisung nochmal ausgeführt. und der index wird danach auf 2 gesetzt. Das geht so weiter bis index = 7 ist. Die Anweisung wird nochmal ausgeführt und index wird um 1 erhöht. Nun wird wieder überprüft ob index kleiner oder gleich 7 ist. 8 ist nicht kleiner als 7 und auch nicht gleich 7, also wird die Schleife abgebrochen und Anweisung2  wird ausgeführt. Die Variable index kann man auch in der Schleife für Anweisungen benutzen. Nach der Schleife wird die Variable wieder gelöscht und ist nicht mehr vorhanden.

 

for (int index= 0; index <= 7; index++)          // Prüfe den Wert vom Zähler (insgesamt 8 mal)

{

   Anweisung1

   .

   .

   break;

   .

   .

   .

}

Anweisung2

 

Wenn in einer Schleife der Befehl "break;" benutzt wird, wird die Schleife sofort abgebrochen. Anweisung2 wird auch nicht mehr ausgeführt.

Kommentar schreiben

Kommentare: 3
  • #1

    Stefan (Dienstag, 17 Juli 2018 21:26)

    Wow cool
    danke :-)

  • #2

    dome (Dienstag, 05 März 2019 14:32)

    hi

  • #3

    Karsten (Donnerstag, 25 Juni 2020 13:04)

    Danke!