
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
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:
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
Stefan (Dienstag, 17 Juli 2018 21:26)
Wow cool
danke :-)
dome (Dienstag, 05 März 2019 14:32)
hi
Karsten (Donnerstag, 25 Juni 2020 13:04)
Danke!