Jeder Taste des Tastenpads ist eine farbige LED zugeordnet. Wird die entsprechende Taste gedrückt, leuchtet die LED. Ein erneuter Druck auf die Taste schaltet die LED wieder aus.
So sieht es aus:
Benötigte Bauteile:
- 5 LEDs
- 3 Widerstände 220 Ω (gelbe, rote und grüne LED)
- 2 Widerstände 100 Ω (blaue und weiße LED)
- Tastenpad
- 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)
Die gedrückte Taste wird durch die Messung des analogen Wertes ermittelt. Leider kann dieser Wert nur ungefähr angegeben werden, so dass es beim laufenden Programm gelegentlich zu nicht erwünschten Effekten kommen kann.
Definiere ein ➨Array für die LEDs und eins für den aktuellen Status der LEDs. Sie sind beim Programmstart ausgeschaltet (false).
Für das Auslesen der Taster sind die Variablen Taster und Analogwert zuständig.
// Array für die LEDs
int LED[5] = {3, 4, 5, 6, 7};
/*
Array für den Zustand der LEDs
false = ausgeschaltet
*/
bool Status[5] = {false, false, false, false, false};
int Taster;
int Analogwert;
Eine ➨int-Funktion erledigt das Auslesen des analogen Werts. Eine Besonderheit ist hier das Abfragen des Wertes mit switch mit einem Wertebereich.
Denke daran, dass die Funktion Tasterabfrage außerhalb des setup- und des loop-Teils steht.
int Tasterabfrage()
{
Analogwert = analogRead(A0);
delay(200);
Serial.println(Analogwert);
/*
A0 gibt je nach gedrückten Taster einen Wert aus
über den Seriellen Monitor wird dieser Wert angezeigt
und kann dann eventuell angepasst werden
die Zeile Serial.println ... kann dann gelöscht werden
Taster 1 → links
Taster 2 → oben Mitte
Taster 3 → unten Mitte
Taster 4 → rechts
Taster 5 → außen
*/
switch (Analogwert)
{
case 0 ... 20:
Taster = 1;
break;
case 30 ... 60:
Taster = 2;
break;
case 70 ... 120:
Taster = 3;
break;
case 150 ... 200:
Taster = 4;
break;
case 300 ... 400:
Taster = 5;
break;
default:
return 0;
}
// gedrückten Taster zurückgeben
return Taster;
}
Der setup-Teil weist mit einer ➨for-Schleife jeder LED des Arrays den Wert OUTPUT zu.
void setup()
{
for (int i = 0; i <= 4; i++)
{
pinMode(LED[i], OUTPUT);
}
Serial.begin(9600);
}
Der loop-Teil fragt mit Hilfe der Funktion TasterAbfrage den gedrückten Taster ab:
void loop()
{
Taster = Tasterabfrage();
// Taster links
if (Taster == 1)
{
/*
gelbe LED Pin 7, LED[4] Status[4]
Status umdrehen, aus true wird false
aus false wird true
*/
Status[4] = !Status[4];
digitalWrite(LED[4], Status[4]);
}
// Taster oben Mitte
if (Taster == 2)
{
// blaue LED Pin 6, LED[3] Status[3]
Status[3] = !Status[3];
digitalWrite(LED[3], Status[3]);
}
// Taster unten Mitte
if (Taster == 3)
{
// rote LED Pin 5, LED[2] Status[2]
Status[2] = !Status[2];
digitalWrite(LED[2], Status[2]);
}
// Taster rechts
if (Taster == 4)
{
// weiße LED Pin 4, LED[1] Status[1]
Status[1] = !Status[1];
digitalWrite(LED[1], Status[1]);
}
// Taster rechts außen
if (Taster == 3)
{
// grüne LED Pin 3, LED[0] Status[0]
Status[0] = !Status[0];
digitalWrite(LED[0], Status[0]);
}
}
Verwandte Anleitungen:
- Farbenspiele mit einem LED-Streifen
- Farbenspiele mit einer RGB-LED
- Jukebox mit Klingeltönen
- Länder-Info
- Multiplikations-Taschenrechner
- Pin-Eingabe
- Pin-Eingabe mit LCD und Servomotor
- Spieluhr mit dem Tastenpad
- Töne erzeugen mit dem Tastenfeld
Letzte Aktualisierung: