Arduino Lektion 68: 4×4 Matrix Tastatur

In diesem Tutorial möchte ich die 4×4 Matrix Tastatur vorstellen.

4x4 Matrix Tastatur
4×4 Matrix Tastatur

Diese kleine Tastatur verfügt über 16 Microtaster, 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.

Technische Daten der Matrix Tastatur

  • Abmaße (LxBxH) 40mm x 44mm x 11mm

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 nix).

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 wurde diese würde ich als klare Empfehlung geben.

4x4 Matrix Tastatur mit montierten Breadboardkabel
4×4 Matrix Tastatur mit montierten Breadboardkabel

Pinbelegung und Aufbau der 4×4 Matrix Tastatur

Pinbelegung und Aufbau der 4x4 Matrix Tastatur
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.

4x4 Matrix Tastatur am Arduino Leonardo

 

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.

Arduino Leonardo
Arduino Leonardo

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 („autsch“) Strg + Shift + L betätigt wird.

Eclipse - Shortcuts
Eclipse – Shortcuts

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 Shema belegt werden.

Eine ausführliche Erläuterung zur Bibliothek „Keyboard“ sowie der Tastenkürzel findest du unter 

https://www.arduino.cc/en/Reference/KeyboardModifiers

https://www.arduino.cc/reference/en/language/functions/usb/keyboard/

#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);
}

Video

Senden von Shortcuts an die Eclipse IDE mit dem Arduino Leonardo

3 Gedanken zu „Arduino Lektion 68: 4×4 Matrix Tastatur

  • Januar 8, 2019 um 13:06
    Permalink

    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“)?

    Antwort
      • Januar 11, 2019 um 12:14
        Permalink

        Stefan,
        Txs. But it has to be a combination of for example 3 buttons:
        W
        P
        Numpad 3

        Best Regards
        Jer Snackey

        Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.