Mit einem Taster sollen verschiedene Aufgaben ausgeführt werden:
- einfacher Klick ⇒ alle LEDs ein- oder ausschalten
- Doppelklick ⇒ Lauflicht vorwärts und rückwärts
- langer Druck ⇒ alle LEDs blinken gleichzeitig 5-mal
So sieht es aus: einfacher Klick -> Doppelklick -> langer Druck
Benötigte Bauteile:
- 5 LEDs
- 3 Widerstände 220 Ω (gelbe, rote und grüne LED)
- 2 Widerstände 100 Ω (blaue und weiße LED)
- Taster
- Leitungsdrähte
Beachte die ⇒Vorwiderstände verschiedener LEDs
Baue die Schaltung auf:
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Bevor du starten kannst, musst du eine Bibliothek installieren:
Funktionen der Bibliothek OneButton:
Schlüsselwort | Aktion |
---|---|
attachClick(Aktion); | Aktion nach einem Tasterdruck |
attachDoubleClick(Aktion) | Aktion nach einem Doppelklick |
attachLongPressStart(Aktion) | ausführen, solange der Taster länger gedrückt bleibt |
attachLongPressStop(Aktion) | ausführen, wenn der Taster losgelassen wird |
setPressTicks(Anzahl) | Anzahl der Millisekunden abwarten, bis das lange Drücken des Tasters erkannt wird Standard: 1000 |
setClickTicks(Anzahl) | Anzahl der Millisekunden bis eine Tasterdruck erkannt wird Standard: 600 |
setDebounceTicks(Anzahl) | Zeit in Millisekunden festlegen, in der keine weiterer Tasterdruck erkannt wird („Entprellzeit“) Standard: 50 |
Binde die benötigte Bibliothek ein und setze 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. Beachte 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 Funktionen. Beachte 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 Bibliothek Button2
Verwandte Anleitungen:
- Blinkende LED
- Blinkende LED mit einem Potentiometer
- Blinkende LEDs mit Multithreading
- Farbe und Helligkeit eines LED-Streifens mit Potentiometern manipulieren
- Farbenspiele mit einem LED-Streifen
- Interrupt - Lauflicht mit Drehgeber
- Interrupt: Farbenspiel mit einem NeoPixel-Ring
- Lauflicht
- Lauflicht mit blinkenden LEDs
- Wechselblinker mit einem Relais
- LEDs mit einem Joystick-Shield schalten
- LEDs mit dem UDP-Protokoll im LAN schalten
- LEDs ohne Pulsweitenmodulation dimmen
- LEDs schalten mit PORT/DDR
- LEDs mit dem Schieberegister 74HC595 steuern
- Wechselblinker
- Würfeln mit LEDs
Letzte Aktualisierung: