LEDs mit einem Tas­ter steu­ern

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

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

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

Benö­tig­te Bau­tei­le:

  • 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)

[Lauflicht_Taster]

Bevor du star­ten kannst, musst du eine Biblio­thek instal­lie­ren:

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

Metho­den der Biblio­thek OneBut­ton:

Metho­deAkti­on
attachClick(Aktion);Akti­on nach einem Tas­ter­druck
attachDoubleClick(Aktion)Akti­on nach einem Dop­pel­klick
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 Varia­blen:

#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 Kom­men­ta­re.

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.attachLongPressStart(langerDruckStart);
  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 Kom­men­ta­re:

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 langerDruckStart()
{
  // warten bis die erste LED dauerhaft leuchtet
  int i = 0;

  // zweimal blinken, danach dauerhaft leuchten
  // bis der Taster losgelassen wurde
  while (i < 2)
  {
    digitalWrite(LED[0], HIGH);
    delay(200);
    digitalWrite(LED[0], LOW);
    delay(200);
    i ++;
  }
  digitalWrite(LED[0], HIGH);
}
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 Auf­ga­ben:


Letzte Aktualisierung: 27. Jul 2020 @ 9:13