LEDs mit einem Tas­ter steuern

Lese­zeit: 4 Minu­ten
Navi­ga­ti­on

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
  • 5 Wider­stän­de > 100 Ω
  • Tas­ter
  • Lei­tungs­dräh­te

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:

Sketch → Biblio­thek ein­bin­den → Biblio­the­ken ver­wal­ten

Metho­den der Biblio­thek OneButton:

Metho­deAkti­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 setup-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 Metho­den. 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);
  }
}


Ver­wand­te Aufgaben:


Letzte Aktualisierung: 26. Jan 2021 @ 9:51