In diesem Tutorial möchte ich die 4×4 Matrix Tastatur vorstellen.
Diese kleine Tastatur verfügt über 16 Mikrotaster, welche in einem Raster von 4 Reihen zu je 4 Spalten angeordnet sind.
In dem Tutorial Arduino Lektion 64: 3×4 Matrix Tastatur habe ich bereits eine Folientastatur beschrieben.
Bezug
Die 4×4 Matrix Tastatur kann für ca. 2,59 € über ebay.de bezogen werden. Hier sind die Hersteller / Verkäufer aus China wieder der Sieger im Preis, jedoch mit einer Lieferzeit von ca. 40 Tagen muss man hier mindestens einen Minuspunkt geben.
Wer dieses Modul früher sein Eigen nennen möchte, muss hier beim Kauf auf den Artikelstandort achten.
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Technische Daten der Matrix Tastatur
- Abmaße (LxBxH) 40 mm x 44 mm x 11 mm
Aufbau & Schaltung
Das mir vorliegende Modul hat eine unbeschriftete 8-fache Stiftleiste. Jedoch durch einfaches Testen der Pins mit einem Messgerät kann die korrekte Belegung ermittelt werden.
Wer sich das Messen ersparen möchte, muss beim Kauf darauf achten das, dass Modul beschriftet ist (am Preis ändert sich nichts).
Die 8-fache Stiftleiste ist, wie ich finde, falsch montiert, denn möchte man die Tastatur montieren stört diese, wenn noch zusätzlich die Breadboardkabel angeschlossen werden. Es gibt diese Tastatur, wo die Stiftleiste im 90° Winkel angebracht wurden, diese Version würde ich als klare Empfehlung geben.
Pinbelegung und Aufbau der 4×4 Matrix Tastatur
Quellcode
Nachdem also nun die Reihen und Spalten und somit die Pinbelegung ermittelt wurde, kann mit der Programmierung begonnen werden.
Ein einfaches Beispiel
Der nachfolgende Quellcode stammt vom Tutorial Arduino Lektion 64: 3×4 Matrix Tastatur hier habe ich nur die Anzahl der Spalten, die Pinbelegung sowie das mehrdimensionale char Array angepasst.
#include <Keypad.h> //Bibliothek zum auslesen der Matrix Tastatur //Definieren der Zeilen und Spalten. //Wenn eine größere Tastatur verwendet wird, //muss das hierdefiniert werden. const byte COLS = 4; const byte ROWS = 4; //Definieren der Pins, über welche die Matrix Tastatur //mit dem Microcontroller verbunden wurde. const byte COL_PINS[COLS] = { 5, 4, 3, 2 }; const byte ROW_PINS[ROWS] = { 6, 7, 8, 9}; //Da der Datentyp char nur ein Zeichen aufnehmen kann, //verwende ich ab der Zahl 10 die Buchstaben A bis G. const char KEYS[ROWS][COLS]={ {'1','2','3','4'}, {'5','6','7', '8'}, {'9','A','B', 'C'}, {'D','E','F', 'G'} }; //Initialisieren des KeyPad Objektes Keypad myKeypad = Keypad(makeKeymap(KEYS), ROW_PINS, COL_PINS, ROWS, COLS); void setup() { //Begin der seriellen Kommunikation mit 9600 baud. Serial.begin(9600); } void loop() { //lesen ob eine Taste gedrückt wurde char key = myKeypad.getKey(); //Wenn eine Taste gedrückt wurde, //dann den Wert auf der seriellen Konsole //Ausgeben. if (key) { Serial.print("Die Taste "); Serial.print(key); Serial.println(" wurde gedrueckt"); } }
Video
Hier nun ein kleines Video, welches die Funktion des oben gezeigten Quellcodes zeigt.
Komplexes Beispiel – Absenden von Shotcuts
Da ich eine spezielle Tastenkombination mit einem Tastendruck erzeugen möchte, muss ich hier zu einem Arduino Leonardo greifen. Der Arduino UNO kann hier nicht genutzt werden, da dieser nicht als USB Host agieren kann.
Ziel dieses komplexen Beispieles soll es sein, die Entwicklungsumgebung Eclipse zu “bedienen”.
Es sollen folgende Shortcuts abgesendet werden:
Shortcut | Auswirkung | Taster |
---|---|---|
Strg + Shift + F | Quellcode Formatieren | S1 |
Strg + Shift + B | Toogle Breakpoint | S2 |
Alt + Shift + A | Toggle Block Selection | S3 |
Strg + Shift + Y | to LowerCase | S4 |
Strg + Shift + X | to UpperCase | S5 |
Strg + Shift +G | References in Workspace | S6 |
Eine komplette Liste aller Tastenkombinationen erhält man, wenn die Tastenkombination Strg + Shift + L betätigt wird.
Quellcode
In dem nachfolgenden Code habe ich mir 6 Shortcuts ausgewählt welche ich öfters verwende. Die restlichen 10 Taster habe ich noch nicht belegt, können aber nach dem gleichen Schema belegt werden.
Eine ausführliche Erläuterung zur Bibliothek “Keyboard” sowie der Tastenkürzel findest du unter
#include <Keypad.h> //Bibliothek zum auslesen der Matrix Tastatur #include <Keyboard.h> //Bibliothek um eine Tastatureingabe zu simulieren //Definieren der Zeilen und Spalten. //Wenn eine größere Tastatur verwendet wird, //muss das hierdefiniert werden. const byte COLS = 4; const byte ROWS = 4; //Definieren der Pins, über welche die Matrix Tastatur //mit dem Microcontroller verbunden wurde. const byte COL_PINS[COLS] = { 5, 4, 3, 2 }; const byte ROW_PINS[ROWS] = { 6, 7, 8, 9}; //Da der Datentyp char nur ein Zeichen aufnehmen kann, //verwende ich hier die Buchstaben A bis P. const char KEYS[ROWS][COLS]={ {'A','B','C','D'}, {'E','F','G','H'}, {'I','J','K','L'}, {'M','N','O','P'} }; //Initialisieren des KeyPad Objektes Keypad myKeypad = Keypad(makeKeymap(KEYS), ROW_PINS, COL_PINS, ROWS, COLS); void setup() { //Begin der seriellen Kommunikation mit 9600 baud. Serial.begin(9600); } void loop() { //lesen ob eine Taste gedrückt wurde char key = myKeypad.getKey(); //Wenn eine Taste gedrückt wurde, //dann den Wert auswerten. if (key) { switch (key){ case 'A': formatCode(); break; case 'B': toggleBreakpoint(); break; case 'C': toggleBlockSelection(); break; case 'D': formatToLowerCase(); break; case 'E': formatToUpperCase(); break; case 'F': referencesInWorkspace(); break; case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': Serial.println("!!! Keine Funktion hinterlegt !!!"); break; } Serial.print("Die Taste "); Serial.print(key); Serial.println(" wurde gedrueckt"); } } void formatCode(){ printKeys(KEY_LEFT_CTRL, KEY_LEFT_SHIFT, 'f'); } void toggleBreakpoint(){ printKeys(KEY_LEFT_CTRL, KEY_LEFT_SHIFT, 'b'); } void toggleBlockSelection(){ printKeys(KEY_LEFT_ALT, KEY_LEFT_SHIFT, 'a'); } void formatToLowerCase(){ printKeys(KEY_LEFT_CTRL, KEY_LEFT_SHIFT, 'z'); } void formatToUpperCase(){ printKeys(KEY_LEFT_CTRL, KEY_LEFT_SHIFT, 'x'); } void referencesInWorkspace(){ printKeys(KEY_LEFT_CTRL, KEY_LEFT_SHIFT, 'g'); } void printKeys(int spezKey1, int spezKey2, char sign){ Keyboard.press(spezKey1); Keyboard.press(spezKey2); Keyboard.press(sign); Keyboard.release(spezKey1); Keyboard.release(spezKey2); Keyboard.release(sign); }
My project is to make a buttonbox for my flightsim.
Almost finished.
i do understand the code a little bit.
The examples you gave are a combination of three buttons. For example CTRL-SHIFT-w
I found out that a combination of 2 buttons: CTRL-CTRL-w is working.
But how do i program the numlock keys??? or just 1 button (for example only “3”)?
Hi Jer,
when you want only send the number 3 you can write with Keyboard.write(“3”).
Take a short look at https://www.arduino.cc/en/Tutorial/KeyboardAndMouseControl there you can find a simple example how to write letters.
Best Regards,
Stefan Draeger
Stefan,
Txs. But it has to be a combination of for example 3 buttons:
W
P
Numpad 3
Best Regards
Jer Snackey
Hallo, super Anleitung und ich habe die gleiche Matrix Tastatur wie oben beschrieben nur leider reagiert mein serieller Monitor auf keine Eingabe der Tastatur. Pinbelegung habe ich 5 mal überprüft, dieser stimmt überein. Die Bibliothek wurde ebenfalls von „Keypad by Mark stanley, Alexander Brevig“ installiert. Die Beispiel Sketches funktionieren ebenfalls nicht. Hast du vielleicht einen Tipp woran es liegt? Ich habe einen Arduino Uno und irgendwie habe ich die Vermutung das es an der Bibliothek liegt, da bei LCD mit i2C ebenfalls nicht läuft.
Gruß Braun
Hi,
ich habe das Tutorial mal geprüft und konnte erstmal kein Fehler finden.
Schicke mir doch einmal ein Foto von deinem Aufbau sowie dein Sketch. Dann schaue ich mir das gerne einmal an.
Gruß,
Stefan Draeger
Ich habe Ihnen eine Email geschickt.
Gruß Frank
Hallo, ich habe hier eine 16×32 Matrixtastatur.
Wenn ich das richtig sehe müsste das doch mit einem Arduino Mega von den Eingängen her passen. Wenn dich das aber richtig verstanden habe, kann der Mega keine Keyboardeingaben an den PC senden oder?
Hi Sven,
ja der Arduino Mega 2560 R3 kann das nicht dazu bräuchtest du einen Arduino Leonardo welcher als USB Host funktioniert. Es gibt aber auch USB Host Shields welche du aufstecken kannst.
https://www.google.com/search?q=schnellender+finger&oq=schne&aqs=chrome.1.69i57j35i39l2j0i433j0.2071j0j4&client=ms-android-huawei-rev1&sourceid=chrome-mobile&ie=UTF-8
Gruß,
Stefan Draeger
Ich habe mir einen Arduino DUE geholt. Die Tastenmatrix ist sogar 22×32 und läuft jetzt wunderbar.
Tastatur im Fundus gefunden. Kabel auf 30cm verlängert. Angeschlossen, Bibliothek installiert, Sketch hochgeladen. Funktioniert perfekt. Klasse Anleitung, sehr gut erklärt. Einfach TOP!!
Ich steuere eine Model OpenAirbühne damit (noch Arduino UNO demnächst Arduino MEGA). Per Taster mach ich die Szenenauswahl, die vorher im Code definiert wurden…
(WS2812b “PAR-Scheinwerfer”, Servos usw.)
einfach genial.
viele Grüße aus der Pfalz.