Werbung

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.

Werbung

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
Dieses Video ansehen auf YouTube.

 

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
Dieses Video ansehen auf YouTube.
Werbung

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

  • 8. Januar 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
      • 11. Januar 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
  • 8. Mai 2020 um 18:42
    Permalink

    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

    Antwort
    • 8. Mai 2020 um 19:24
      Permalink

      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

      Antwort
      • 11. Mai 2020 um 19:24
        Permalink

        Ich habe Ihnen eine Email geschickt.

        Gruß Frank

        Antwort

Schreibe einen Kommentar

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

Werbung