Arduino Mega R3 2560 & 3×4 Keypad

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

Den Microcontroller 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 wiefolgt angeschlossen wird:

Arduino Mega R3 2560 mit 3x4 Matrix Tastatur
Arduino Mega R3 2560 mit 3×4 Matrix Tastatur

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.");
      }
    }
  }


}

Video

 

Schreibe einen Kommentar

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