Leer un teclado matricial 4x4 en Arduino

FunduinoÚltima actualización el

Tastendrücke eines Matrix-Keypads am seriellen Monitor anzeigen

Ein Tastenfeld ist der einfachste Weg, dem Arduino Zahlen und Zeichen einzugeben – für einen Zahlencode, ein Menü oder einen Taschenrechner.

In dieser Anleitung liest du ein Matrix-Tastenfeld aus und lässt dir die gedrückte Taste am seriellen Monitor anzeigen. Am Ende erfährst du, was du ändern musst, wenn du statt eines 4×4- ein 3×4-Tastenfeld verwendest.

Matrix-Tastenfeld mit 16 Tasten, angeschlossen an einen Arduino
Das 4×4-Tastenfeld am Arduino

So funktioniert ein Tastenfeld

Tastenfelder gibt es mit 3 × 4 Tasten (12 Stück) und mit 4 × 4 Tasten (16 Stück). Um die Funktionsweise zu verstehen, stellst du dir das Keypad am besten wie ein Koordinatensystem vor: Jede Taste liegt auf dem Kreuzungspunkt einer Zeile (ROWS) und einer Spalte (COLS) und ist mit je einem Pin für beide verbunden. Drückst du eine Taste, verbindet sie diese beiden Pins miteinander.

Der Mikrocontroller liest diese Pins mit der digitalRead()-Funktion aus. Weil du eine Bibliothek verwendest, passiert diese Abfrage im Hintergrund – du musst sie nicht selbst programmieren, und der Sketch bleibt übersichtlich.

Matrix-Tastenfeld mit 16 Tasten, angeschlossen an einen Arduino
Das 4×4-Tastenfeld am Arduino

Bibliothek installieren

Die benötigte Bibliothek ist in der Arduino-Software nicht vorinstalliert. Wir verwenden Keypad von Mark Stanley und Alexander Brevig. Du fügst sie über die Bibliotheksverwaltung hinzu; als Suchbegriff gibst du „Keypad“ ein.

Schaltung aufbauen

Das 4×4-Tastenfeld hat acht Anschlüsse: vier für die Zeilen und vier für die Spalten. Im Sketch liegen die Spalten an den Pins 2 bis 5 und die Zeilen an den Pins 6 bis 9. Weitere Bauteile brauchst du nicht – auch keine Widerstände.

Fritzing-Schaltplan eines 4×4-Tastenfelds am Arduino UNO
Schaltplan: acht Leitungen vom Tastenfeld an die Pins 2 bis 9

Tasten auslesen und anzeigen

Im Sketch legst du zuerst fest, welche Zeichen auf deinem Tastenfeld stehen und an welchen Pins Zeilen und Spalten hängen. Danach fragst du mit Tastenfeld.getKey() ab, ob gerade eine Taste gedrückt ist – und gibst sie am seriellen Monitor aus.

Öffne nach dem Hochladen den seriellen Monitor bei 9600 Baud und drücke ein paar Tasten.

Serieller Monitor mit der Ausgabe der gedrückten Tasten
So sieht es aus, wenn alles gelungen ist
4×4-Tastenfeld auslesen
#include <Keypad.h>

// Hier wird die Größe des Keypads definiert
const byte COLS = 4;  // 4 Spalten
const byte ROWS = 4;  // 4 Zeilen

// Die Ziffern und Zeichen des Keypads werden eingegeben:
char hexaKeys[ROWS][COLS] = {
  { 'D', '#', '0', '*' },
  { 'C', '9', '8', '7' },
  { 'B', '6', '5', '4' },
  { 'A', '3', '2', '1' }
};

byte colPins[COLS] = { 2, 3, 4, 5 };  // Definition der Pins für die 4 Spalten
byte rowPins[ROWS] = { 6, 7, 8, 9 };  // Definition der Pins für die 4 Zeilen

char Taste;  // Taste ist die Variable für die jeweils gedrückte Taste.

// Das Keypad kann ab sofort mit "Tastenfeld" angesprochen werden.
Keypad Tastenfeld = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Taste = Tastenfeld.getKey();  // Unter der Variablen "Taste" wird die gedrückte Taste gespeichert.

  if (Taste)  // Wenn eine Taste gedrückt wurde ...
  {
    Serial.print("Die Taste ");
    Serial.print(Taste);
    Serial.print(" wurde gedrueckt");
    Serial.println();  // ... teile uns am seriellen Monitor die gedrückte Taste mit.
    delay(200);        // Kurze Pause, damit eine Taste nicht mehrfach angezeigt wird.
  }
}

Variante: ein 3×4-Tastenfeld verwenden

Verwendest du ein Tastenfeld mit 3 × 4 Tasten, änderst du im Sketch drei Stellen: die Anzahl der Spalten, die Spalten-Pins und die Tabelle der Zeichen. Die Zeilen bleiben unverändert.

Achtung, hier stimmt etwas nicht: Die angegebenen Spalten-Pins 8, 7 und 6 sind im Hauptsketch bereits als Zeilen-Pins vergeben (rowPins = 6, 7, 8, 9). Ein Pin kann nicht gleichzeitig Zeile und Spalte sein. Wähle für die Spalten Pins, die nicht in rowPins vorkommen – oder passe rowPins entsprechend an.

Änderungen für ein 3×4-Tastenfeld
const byte COLS = 3;               // 3 Spalten
byte colPins[COLS] = { 8, 7, 6 };  // Definition der Pins für die 3 Spalten

char hexaKeys[ROWS][COLS] = {
  { '#', '0', '*' },
  { '9', '8', '7' },
  { '6', '5', '4' },
  { '3', '2', '1' }
};
Calificar la guía

Comentarios

Haz una pregunta o comparte tu experiencia

Schreib uns, wenn etwas nicht funktioniert. Nenne dabei dein Board und die Fehlermeldung.

Revisamos cada comentario antes de publicarlo. Tu dirección de correo electrónico permanece con nosotros.