Franzis Adventskalender für Arduino – Tag 7

In diesem Beitrag möchte ich mit dir das siebente Türchen des Franzis Adventskalender für Arduino öffnen.

Franzis Adventskalender für Arduino - Tag 7
Franzis Adventskalender für Arduino – Tag 7

Wenn wir nun das Türchen öffnen, finden wir einen 10 kOhm Widerstand.

Farbcodierung der Widerstände

Auf dem Widerstand findest du Ringe in unterschiedliche Farben.

230 Ohm Widerstand mit 5% Toleranz
230 Ohm Widerstand mit 5% Toleranz

Wenn du mal einen Widerstand hast und den Wert ermitteln möchtest, so muss man lediglich anhand der Ringfarbe und einer Tabelle dieses ermitteln ODER man nutzt ein Online-Tool wo du einfach die Farben der Ringe wählst. So ein Online-Tool habe ich dir unter https://draeger-it.blog/widerstandsrechner/ bereitgestellt.

Schaltungen – Taster mit PullUp / PullDown Widerstand

Am gestrigen Tag habe ich erwähnt, dass man einen Taster mit einem PullUp oder PullDown Widerstand an den Mikrocontroller anschließen kann.

Der einzige Unterschied zwischen diesen beiden Schaltungen ist das Signal, welches hinterher ausgewertet wird. Bei einer Schaltung mit einem PullUp Widerstand wird das Betätigen des Tasters einen Wechsel von HIGH auf LOW bewirken und bei PullDown von LOW auf HIGH.

Schaltung - Pullup & Pulldown Widerstand
Schaltung – Pullup & Pulldown Widerstand

Die beiden möglichen Schaltungen habe ich dir bereits in separaten Beiträgen gezeigt.

Hier möchte ich auf die Schaltung mit einem PullDown Widerstand eingehen. Um diese Schaltung aufzubauen, müssen wir den einen Pin vom Taster mit 5 V verbinden und den anderen mit 10 kOhm Widerstand, welcher wiederum mit GND (der Minusleitung) verbunden wird. Zwischen dem Taster und dem Widerstand schließen wir nun unseren Draht an, welcher zum digitalen Pin D7 geht.

Wenn wir den Code von gestern verwenden, dann müssen wir 2 kleine Änderungen ausführen, zunächst ändern wir den Pin von D2 auf D7, und beim Aufruf der Funktion „pinMode(taster, INPUT_PULLUP);“ schreiben wir „pinMode(taster, INPUT);“ (quasi ohne „_PULLUP“) denn wir haben ja nun einen eigenen kleinen 10 kOhm Widerstand in der Schaltung.

Durchschalten der LEDs

Wollen wir nun ein kleines Programm schreiben, bei welchem wir beim Betätigen des Tasters immer eine andere LED aktivieren.

Wenn wir jedoch einfach nur das Event des Tasters abfragen, dann würden wir nachfolgendes Ergebnis erhalten.

Das ganze nennt sich prellen und bedeutet kurz das, dass Signal mehrfach erkannt wird.

Prellen eines Tasters

Wenn wir das Signal des Tasters bzw. die Änderung des Zustands des Pins, an welchen der Taster angeschlossen ist, reagieren wollen und so bestimmte LEDs aktivieren wollen. So kommt es vor, dass mehrere Signale / Zustandsänderungen erkannt werden, das liegt daran, dass wir einfach zu langsam sind, den Taster loszulassen bzw. der Mikrocontroller mit seinen 16 MHz deutlich zu schnell ist.

Um diesen Taster nun zu entprellen, gibt es eine sehr gute Bibliothek, welche wir einbinden und verwenden können oder wir erweitern unseren Code um ein paar Zeilen.

// Taster am digitalen Pin D7 angeschlossen
#define taster 7

#define ledRot 3
#define ledGelb 6
#define ledGruen 8

int activeLED = -1;

int leds[] = { ledRot, ledGelb, ledGruen };

long lastAction = 0L;
const int DELAY_BETWEEN_ACTIONS = 500;

void setup() {
  // Definieren das der Pin der LED als Ausgang dient.
  pinMode(taster, INPUT);

  pinMode(ledRot, OUTPUT);
  pinMode(ledGelb, OUTPUT);
  pinMode(ledGruen, OUTPUT);
}

void loop() {
  // Wenn der Taster betätigt wird, ist der Pin auf HIGH geschaltet.
  if (digitalRead(taster) == 1) {
    // Wenn der letzte Zeitpunkt der Ausführung plus dem Zeitlichenabstand zwischen zwei Ausführungen
    // kleiner als der aktuelle Zeitstempel in Millisekunden ist, dann...
    if ((lastAction + DELAY_BETWEEN_ACTIONS) < millis()) {
      // speichern des aktuellen Zeitstempels in Millisekunden
      lastAction = millis();
      // deaktivieren der zuletzt aktivierten LED
      digitalWrite(leds[activeLED], LOW);

      // Wir haben 3 LEDs in der Schaltung, das Array beginnt mit dem Index 0 
      // somit ist der maximale Index 2, wenn dieser erreicht ist, dann soll 
      // wieder von vorne begonnen werden.
      if (activeLED == 2) {
        activeLED = -1;
      }

      // den Index für die aktuelle LED um eins erhöhen
      activeLED = activeLED + 1;
      // aktivieren der LED
      digitalWrite(leds[activeLED], HIGH);

    }
  }
}

Wenn wir den Code nun auf den Mikrocontroller überspielen, dann können wir mit dem Taster durch die LEDs steppen.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert