Über Instagram wurde ich nach einer kleinen Lösung zu einem Problem mit dem 3×4 Keypad und einem Arduino Mega R3 2560 gefragt.


Den Mikrocontroller Arduino Mega R3 2560 habe ich im gleichnamigen Beitrag Arduino MEGA 2560 R3 – Übersicht vorgestellt. Für die 3×4 Matrix Tastatur habe ich den Beitrag Arduino Lektion 64: 3×4 Matrix Tastatur erstellt und auch dort ausführlich erläutert. In diesem Beitrag möchte ich speziell auf ein kleines, spezielles Projekt eingehen.
Ziel
Es sollen spezielle Aktionen ausgeführt werden, wenn 2 bestimmte Tasten hintereinander betätigt werden.
benötigte Bauteile
Für dieses Projekt benötigst du:
- 1x Arduino Mega R3 2560,
- 1x USB Kabel, USB-Typ A – B
- 1x 3×4 Matrix Tastatur,
- 7x Breadboardkabel, männlich – männlich, 20cm
Aufbau & Schaltung
Das 3×4 Matrix Keypad verfügt über einen 8 poligen Buchsenanschluss, welcher mit dem Arduino Mega wie folgt angeschlossen wird:
Programmieren
#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 = 3; const byte ROWS = 4; //Definieren der Pins, über welche die Matrix Tastatur //mit dem Microcontroller verbunden wurde. const byte COL_PINS[COLS] = { 2, 3, 4 }; const byte ROW_PINS[ROWS] = { 5, 6, 7, 8 }; //Aufbau der Tastatur als mehrdimensionales Array abbilden. //Es ist darauf zu achten das die Tastatur verkehrtherum abgebildet ist. //Wenn eine 4x4 Tastatur verwendet wird muss hier jeweils //die Buchstaben 'A' bis 'D' ergänzt werden. const char KEYS[ROWS][COLS] = { {'#', '0', '*'}, {'9', '8', '7'}, {'6', '5', '4'}, {'3', '2', '1'} }; //Initialisieren des KeyPad Objektes Keypad myKeypad = Keypad(makeKeymap(KEYS), ROW_PINS, COL_PINS, ROWS, COLS); unsigned int index = 1; char key1, key2; 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"); switch (index) { case 1: key1 = key; break; case 2: key2 = key; break; } //den index um 1 erhöhen index++; //Wenn der Index gleich 3 ist dann.. if (index == 3) { //zurücksetzen des Indexes auf den Wert 1 index = 1; //Wenn als erstes die Taste 1 gedrückt wurde UND //als zweites die Taste 2 dann... if (key1 == '1' && key2 == '2') { Serial.println("key1 = 1 && key2 = 2"); } //Wenn als erstes die Taste * gedrückt wurde UND //als zweites die Taste 1 dann... else if (key1 == '*' && key2 == '1') { Serial.println("key1 = * && key2 = 1"); } //Nicht die Tasten 1 & 2 bzw. * & 1 gedrückt wurden dann... else { Serial.println("Drücken Sie die Tasten 1 & 2 oder * & 1 nacheinander."); } } } }