LEDs mit einem Tas­ter steuern

Lese­zeit: 4 Minu­ten

Lösung
Seite als PDF

Mit einem Tas­ter sol­len ver­schie­de­ne Auf­ga­ben aus­ge­führt werden:

  • ein­fa­cher Klick → alle LEDs ein- oder ausschalten 
  • Dop­pel­klick → Lauf­licht vor­wärts und rückwärts 
  • lan­ger Druck → alle LEDs blin­ken gleich­zei­tig 5-mal 

So sieht es aus: ein­fa­cher Klick -> Dop­pel­klick -> lan­ger Druck

Benö­tig­te Bauteile:

  • 5 LEDs
  • 3 Wider­stän­de 220 Ω (gel­be, rote und grü­ne LED)
  • 2 Wider­stän­de 100 Ω (blaue und wei­ße LED)
  • Tas­ter
  • Lei­tungs­dräh­te

Beach­te die ➨Vor­wi­der­stän­de ver­schie­de­ner LEDs

Baue die Schal­tung auf:
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Bevor du star­ten kannst, musst du eine Biblio­thek installieren:

Funk­tio­nen der Biblio­thek OneButton:

Schlüs­sel­wortAkti­on
attachClick(Aktion);Akti­on nach einem Tasterdruck
attachDoubleClick(Aktion)Akti­on nach einem Doppelklick
attachLongPressStart(Aktion)aus­füh­ren, solan­ge der Tas­ter län­ger gedrückt bleibt
attachLongPressStop(Aktion)aus­füh­ren, wenn der Tas­ter los­ge­las­sen wird
setPressTicks(Anzahl)Anzahl der Mil­li­se­kun­den abwar­ten, bis das lan­ge Drü­cken des Tas­ters erkannt wird
Stan­dard: 1000
setClickTicks(Anzahl)Anzahl der Mil­li­se­kun­den bis eine Tas­ter­druck erkannt wird
Stan­dard: 600
setDebounceTicks(Anzahl)Zeit in Mil­li­se­kun­den fest­le­gen, in der kei­ne wei­te­rer Tas­ter­druck erkannt wird („Ent­prell­zeit“)
Stan­dard: 50

Bin­de die benö­tig­te Biblio­thek ein und set­ze die Variablen:

# include "OneButton.h"

int TASTER = 13;

// Array für die LEDs
int LED[5] = {3, 4, 5, 6, 7};

// Name des Tasters
OneButton NameTaster(TASTER, true);

// LEDs sind beim Start ausgeschaltet
bool Status = LOW;

Der set­up-Teil. Beach­te die Kommentare.

void setup()
{
  // LEDs als OUTPUT setzen
  for (int i = 0; i <= 5; i ++)
  {
    pinMode(LED[i], OUTPUT);
  }

  pinMode(TASTER, INPUT_PULLUP);

  // Aktionen dem Modus des Tasters zuordnen
  NameTaster.attachClick(einKlick);
  NameTaster.attachDoubleClick(DoppelKlick);
  NameTaster.attachLongPressStop(langerDruckStopp);

  /*
    Anzahl der Millisekunden bei den jeweiligen Aktionen festlegen
    Standardwerte:
    PressTicks: 1000
    ClickTicks: 600
    DebounceTicks: 50
    wenn die Standardwerte gesetzt werden sollen
    können die nächsten Zeilen auskommentiert werden
  */
  NameTaster.setPressTicks(800);
  NameTaster.setClickTicks(400);
  NameTaster.setDebounceTicks(50);
}

Der loop-Teil und die Funk­tio­nen. Beach­te die Kommentare:

void loop()
{
  // Taster alle 10 Millisekunden abfragen
  NameTaster.tick();
  delay(10);
}

void einKlick()
{
  /*
    Status == true (1) -> einschalten
    Status == false (0) -> ausschalten
    Status umkehren
  */
  Status = !Status;
  for (int i = 0; i <= 5; i ++)
  {
    // aktuelle LED i ein- oder ausschalten
    digitalWrite(LED[i], Status);
  }
}

void DoppelKlick()
{
  for (int i = 0; i <= 4; i ++)
  {
    // aktuelle LED i einschalten
    digitalWrite(LED[i], HIGH);
    delay(200);

    // aktuelle LED i ausschalten
    digitalWrite(LED[i], LOW);
  }

  // ...und zurück
  for (int i = 4; i >= 0; i --)
  {
    // aktuelle LED i einschalten
    digitalWrite(LED[i], HIGH);
    delay(200);

    // aktuelle LED i ausschalten
    digitalWrite(LED[i], LOW);
  }
}

void langerDruckStopp()
{
  // alle LEDs blinken 5-mal
  // d -> Anzahl der Durchläufe

  for (int d = 0; d <= 6; d++)
  {
  // einschalten
    for (int i = 0; i <= 4; i++)
    {
        digitalWrite(LED[i], HIGH);
    }
    delay(200);

    // ausschalten
    for (int i = 0; i <= 4; i++)
    {
      digitalWrite(LED[i], LOW);
    }
    delay(200);
  }
}

Lösung mit der Biblio­thek Button2


Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 10. Nov 2023 @ 13:37