Analog keypad on Arduino

FunduinoLast updated on

Fünf Taster über einen einzigen analogen Eingang auslesen

Fünf Taster und trotzdem nur ein einziger belegter Pin: Das AD-Keyboard-Modul legt alle Taster auf einen analogen Ausgang und unterscheidet sie über den gemessenen Wert.

In dieser Anleitung schließt du das Modul an, lernst die Analogwerte der fünf Taster kennen und lässt dir den gedrückten Taster im seriellen Monitor anzeigen.

Das analoge Keyboard-Modul

Das AD-Keyboard-Modul hat fünf Taster, die alle über einen einzigen analogen Eingang ausgelesen werden. Das spart Pins: Statt fünf digitaler Eingänge brauchst du nur den analogen Pin A0.

In dieser Anleitung gibst du bei jedem Tastendruck sowohl den gemessenen analogen Wert als auch die Bezeichnung des Tasters im seriellen Monitor aus.

Anschluss und analoge Werte

Die Verkabelung ist einfach, das Modul hat nur drei Pins:

  • OUT – der analoge Ausgang, an Pin A0 des Mikrocontrollers
  • VCC – die Spannungsversorgung, an den 5V-Pin des Mikrocontrollers
  • GND – an den GND-Pin des Mikrocontrollers

Welche Taste gedrückt wurde, ermittelst du über den analogen Wert. Bei 5 V Versorgungsspannung liegt der Wert bei 1023, solange kein Taster gedrückt ist. Jeder Taster zieht den Wert auf einen anderen Bereich herunter:

  • Taster 1: etwa 0
  • Taster 2: etwa 30
  • Taster 3: etwa 85
  • Taster 4: etwa 163
  • Taster 5: etwa 348

Versorgst du das Modul mit einer anderen Spannung als 5 V, verschieben sich diese Werte. Lass dir den Analogwert dann zuerst im seriellen Monitor anzeigen und passe die Grenzen im Sketch an.

Im Artikel kündigt der Satz „Sobald ein Taster gedrückt wird, verändert sich dieser Wert wie folgt:“ eine Wertetabelle an, die dort vollständig fehlt. Die Werte stehen nur verstreut in den Kommentaren des Sketches. Die hier aufgeführten Werte stammen aus diesen Kommentaren.

Der Sketch

Der Sketch prüft den Analogwert in einem eigenen Programmblock namens Tasterabfrage(). Die Abfragen sind absteigend sortiert: Zuerst wird geprüft, ob der Wert über 1000 liegt – dann ist kein Taster gedrückt. Danach folgen die Grenzen für die fünf Taster von unten nach oben.

Im loop-Teil rufst du Tasterabfrage() auf und gibst je nach Rückgabewert die passende Meldung im seriellen Monitor aus.

Der Programmblock heißt im Sketch Tasterabfrage(), wird in drei Kommentaren aber „Tasterstatus“ genannt. Analogwerte zwischen 400 und 1000 fallen durch alle Abfragen und liefern KeinTaster zurück – das ist als Rückfallebene sinnvoll, im Artikel aber nicht erklärt.

Tastendruck erkennen und im Seriellen Monitor ausgeben
int Taster;
int Analogwert = 0;
#define Taster1 1
#define Taster2 2
#define Taster3 3
#define Taster4 4
#define Taster5 5
#define KeinTaster 0
//Ab hier wird ein neuer Programmblock mit dem Namen "Tasterstatus" erstellt. Hier wird ausschließlich geprüft, welcher Taster gedrückt ist.
int Tasterabfrage()
{
Analogwert = analogRead(A0); // Auslesen des Tastermoduls am Analogen Pin A0.
Serial.println(Analogwert); //Diese Zeile sorgt dafür, dass der ausgelesene Analogwert im seriellen Monitor angezeigt wird. Das kann sinnvoll sein, wenn das Tastenmodul mit einer anderen Spannung als 5V versorgt wird, da sich daraus andere analoge Messwerte ergeben würden. Ansonsten kann diese Zeile weggelassen werden.
if (Analogwert > 1000) return KeinTaster; // Solange kein Taster gedrückt wurde, liegt der analoge Wert liegt bei 1023
if (Analogwert < 15) return Taster1; //Der analoge Wert für Taster1 beträgt ca. 0
if (Analogwert < 50) return Taster2; //Der analoge Wert für Taster2 beträgt ca. 30
if (Analogwert < 120) return Taster3; //Der analoge Wert für Taster3 beträgt ca. 85
if (Analogwert < 300) return Taster4; //Der analoge Wert für Taster4 beträgt ca. 163
if (Analogwert < 400) return Taster5; //Der analoge Wert für Taster5 beträgt ca. 348
return KeinTaster; // Ausgabe wenn kein Taster gedrückt wurde.
}
// Hier wird der Programmblock "Tasterstatus" abeschlossen.
void setup()
{
Serial.begin(9600); //Die Kommunikation mit dem seriellen Port wird gestartet. Das benötigt man, um sich den ausgelesenen Wert im serial monitor anzeigen zu lassen.
}
void loop()
{
Taster=Tasterabfrage(); //Hier springt der Loop in den oben angegebenen Programmabschnitt "Tasterstatus" und liest dort den gedrückten Taster aus.
if (Taster==0) Serial.println("Es wurde kein Taster gedrueckt"); // Diese Zeile kann weggelassen werden, wenn nur bei einem Tastendruck eine Ausgabe auf dem seriellen Monitor erscheinen soll.
if (Taster==1) Serial.println("Es wurde Taster 1 gedrueckt");
if (Taster==2) Serial.println("Es wurde Taster 2 gedrueckt");
if (Taster==3) Serial.println("Es wurde Taster 3 gedrueckt");
if (Taster==4) Serial.println("Es wurde Taster 4 gedrueckt");
if (Taster==5) Serial.println("Es wurde Taster 5 gedrueckt");
} //Loop beenden
Rate the instructions

Comments

Ask a question or share an experience

Contact us if something doesn’t work. Please include your board and the error message.

We review every comment before publication. Your email address remains with us.