Arduino Tutorial: Der prellende Taster

Bis jetzt haben wir unseren Taster so verwendet, dass etwas passiert, sobald wir ihn gedrückt halten. Doch dieses mal möchten wir, dass was passiert sobald wir einmal kurz darauf drücken. 

 

Hierfür möchten wir 8 LEDs nach und nach leuchten lassen, sobald der Taster einmal kurz gedrückt wurde. Dabei soll LED1 leuchten. Wenn wir den Taster drücken geht LED1 aus und LED2 leuchtet. Wenn wir den Taster nochmal drücken soll LED2 ausgehen und LED3 leuchten. Das geht bis LED8 so weiter. Wenn der Taster das 8. mal gedrückt wird, geht LED8 aus und LED1 geht wieder an. Und dann geht es von neu weiter.

 

 

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?

Die acht LEDs werden an Pin 6 bis Pin 13 angeschlossen. Der Taster wird an Pin 4 angeschlossen.

 

 

 

 

 

Der Code

int led1 =13;                             // 

int led2 =12;                             //

int led3 =11;                             //

int led4 =10;                             //

int led5 =9;                              // Variablen für LEDs

int led6 =8;                              //

int led7 =7;                              //

int led8 =6;                              //

 

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(led1, OUTPUT);                  //

  pinMode(led2, OUTPUT);                  //

  pinMode(led3, OUTPUT);                  //

  pinMode(led4, OUTPUT);                  //

  pinMode(led5, OUTPUT);                  // LEDs als Ausgang definieren

  pinMode(led6, OUTPUT);                  //

  pinMode(led7, OUTPUT);                  //

  pinMode(led8, OUTPUT);                  //

 

  pinMode(button, INPUT);                 // Taster als Eingang definieren

  digitalWrite(button, HIGH);             // Pull- Up- Widerstand aktivieren

 

  digitalWrite(led1, LOW);                //

  digitalWrite(led2, LOW);                //

  digitalWrite(led3, LOW);                //

  digitalWrite(led4, LOW);                //

  digitalWrite(led5, LOW);                // Alle LEDs ausschalten

  digitalWrite(led6, LOW);                //

  digitalWrite(led7, LOW);                //

  digitalWrite(led8, 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

  {

     if (buttonStatus == LOW)             // Und wenn der Taster gedrückt wurde

     {

        if (zaehler == 7)                 // Und der Zähler gleich 7 ist

        {

           zaehler = 0;                   // Setze den Zähler zurück auf 0

 

        } 

        else

        {

     

           zaehler++;                    // Wenn der Zähler nicht gleich 7 ist, erhöhe den

                                         // Zähler um 1

                                         // Bsp:. Wenn Zähler = 3 -> mach Zähler = 4

        }

     }

  }

 

  buttonStatusAlt = buttonStatus;        // Setze den alten Status = den neuen Status

 

 

  if (zaehler == 0)                      // Wenn Zähler gleich null

  {

  

     digitalWrite(led8, LOW);            //Mach LED8 aus und LED1 an

     digitalWrite(led1, HIGH);

 

  }

 

  if (zaehler == 1)                      // Wenn Zähler gleich 1

  {

  

     digitalWrite(led1, LOW);            // Mach LED1 aus und LED2 an

     digitalWrite(led2, HIGH);               

 

  }

 

  if (zaehler == 2)                      // Das geht so weiter......

  {

  

     digitalWrite(led2, LOW);

     digitalWrite(led3, HIGH);

 

  }

 

  if (zaehler == 3)

  {

  

     digitalWrite(led3, LOW);

     digitalWrite(led4, HIGH);

 

  }

 

  if (zaehler == 4)

  {

  

     digitalWrite(led4, LOW);

     digitalWrite(led5, HIGH);

 

  }

 

  if (zaehler == 5)

  {

  

     digitalWrite(led5, LOW);

     digitalWrite(led6, HIGH);

 

  }

 

  if (zaehler == 6)

  {

  

     digitalWrite(led6, LOW);

     digitalWrite(led7, HIGH);

 

  }

 

  if (zaehler == 7)                      // Wenn Zähler gleich 7 (Wir sind bei der letzten

                                         // LED)

  {

  

     digitalWrite(led7, LOW);            // Mach LED7 aus und LED8 an

     digitalWrite(led8, HIGH);

 

  }

                                         // Prüfe alles von neu

}

 

 

Den Sketch könnt ihr auch hier herunterladen.

 

 

Code- Review

Ich hoffe, dass mit den Kommentaren alles ausreichend erklärt wurde. Den Code kann man etwas besser gestalten. Die if- Befehle sind zu aufwendig. Wie das besser gehen kann erfährst du im nächsten Kapitel.

 

 

Schaltungs- Review

Wenn man schnell hintereinander oder wenigstens öfters auf den Taster drückt, müsstest du erkennen, dass der Taster nicht richtig funktioniert. Zwischendurch werden einige LEDs übersprungen. 

Das liegt an dem Phänomen des Tastenprellens.

Wenn du nur einmal auf den Taster drückst, sieht das ungefähr so aus:

Dadurch denkt der Mikrocontroller, dass der Taster mehrmals gedrückt wurde.

Das Problem kannst du umgehen indem du den Mikrocontroller nach jedem Tasterdruck etwas warten lässt, damit das Prellen sich wieder legen kann. Der Code könnte zum Beispiel so aussehen:

 

 

int led1 =13;                            // 

int led2 =12;                            //

int led3 =11;                            //

int led4 =10;                            //

int led5 =9;                             // Variablen für LEDs

int led6 =8;                             //

int led7 =7;                             //

int led8 =6;                             //

 

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(led1, OUTPUT);                 //

  pinMode(led2, OUTPUT);                 //

  pinMode(led3, OUTPUT);                 //

  pinMode(led4, OUTPUT);                 //

  pinMode(led5, OUTPUT);                 // LEDs als Ausgang definieren

  pinMode(led6, OUTPUT);                 //

  pinMode(led7, OUTPUT);                 //

  pinMode(led8, OUTPUT);                 //

 

  pinMode(button, INPUT);                // Taster als Eingang definieren

  digitalWrite(button, HIGH);            // Pull- Up- Widerstand aktivieren

 

  digitalWrite(led1, LOW);               //

  digitalWrite(led2, LOW);               //

  digitalWrite(led3, LOW);               //

  digitalWrite(led4, LOW);               //

  digitalWrite(led5, LOW);               // Alle LEDs ausschalten

  digitalWrite(led6, LOW);               //

  digitalWrite(led7, LOW);               //

  digitalWrite(led8, 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

  {

     if (buttonStatus == LOW)            // Und wenn der Taster gedrückt wurde

     {

        if (zaehler == 7)                // Und der Zähler gleich 7 ist

        {

           zaehler = 0;                  // Setze den Zähler zurück auf 0

 

        } else

        {

     

           zaehler++;                    // Wenn der Zähler nicht gleich 7 ist, erhöhe den

                                         // Zähler um 1

                                         // Bsp:. Wenn Zähler = 3 -> mach Zähler = 4

 

        }

     }

  }

 

  buttonStatusAlt = buttonStatus;        // Setze den alten Status = den neuen Status

 

 

  if (zaehler == 0)                      // Wenn Zähler gleich null

  {

  

     digitalWrite(led8, LOW);            // Mach LED8 aus und LED1 an

     digitalWrite(led1, HIGH);

     delay(200);                         // Warte 200 Millisekunden

 

  }

 

  if (zaehler == 1)                      // Wenn Zähler gleich 1

  {

  

     digitalWrite(led1, LOW);            // Mach LED1 aus und LED2 an

     digitalWrite(led2, HIGH);               

     delay(200);                         // Warte 200 Millisekunden

 

  }

 

  if (zaehler == 2)                      // Das geht so weiter......

  {

  

     digitalWrite(led2, LOW);

     digitalWrite(led3, HIGH);

     delay(200);                        

 

  }

 

  if (zaehler == 3)

  {

  

     digitalWrite(led3, LOW);

     digitalWrite(led4, HIGH);

     delay(200);                       

 

  }

 

  if (zaehler == 4)

  {

  

     digitalWrite(led4, LOW);

     digitalWrite(led5, HIGH);

     delay(200);                        

 

  }

 

  if (zaehler == 5)

  {

  

     digitalWrite(led5, LOW);

     digitalWrite(led6, HIGH);

     delay(200);                       

 

  }

 

  if (zaehler == 6)

  {

  

     digitalWrite(led6, LOW);

     digitalWrite(led7, HIGH);

     delay(200);                         // Warte 200 Millisekunden

 

  }

 

  if (zaehler == 7)                      // Wenn Zähler gleich 7 (Wir sind bei der letzten

                                         // LED)

  {

  

     digitalWrite(led7, LOW);            // Mach LED7 aus und LED8 an

     digitalWrite(led8, HIGH);

     delay(200);                         // Warte 200 Millisekunden

 

  }

                                         // Prüfe alles von neu

}

 

 

Den Sketch kannst du auch hier downloaden.

 

 

 

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