Arduino Tutorial: Die for- Schleife und Arrays

Der Code im vorherigen Kapitel war viel zu umständlich, deshalb zeige ich dir nun 2 neue Ansatzmöglichkeiten für deinen Code. 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

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;                                     // Hier wird die Information

                                                          // gespeichert, 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 1

      

      }

  }

}

 

 

 

 

Den Sketch kannst du auch hier herunterladen.

 

 

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 wird 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. Danach sagen wir noch wie sich die Variable index sich 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. 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.

 

 

Jetzt bist du dran

In der setup- Methode wären noch zwei for- Schleifen sinnvoll. Wie sieht der Code dann aus?

 

Die Lösung findest du hier.

 

 

 

 

 

Wenn du hier irgendetwas vermisst, bessere Ansätze hast oder dir etwas nicht klar ist, zögere nicht einen Kommentar zu hinterlassen.

Kommentar schreiben

Kommentare: 0