Nr.04 – Tastenfeld

Ein Tastenfeld am Arduino verwenden

Aufgabe: Mit dem Arduino soll ein Keypad (Tastenfeld) ausgelesen und die gedrückte Taste am Seriellen Monitor angezeigt werden.

Materialbeschaffung: www.funduinoshop.com

Bei dieser Anleitung wird ein 3×4 Tastenfeld benutzt. Alternativ kann auch ein 4×4 Tastenfeld verwendet werden, hierbei müssen die Pins und die definierten Tasten (COLS/hexaKeys) angepasst werden (s.u.).

Material: Arduino / Kabel (7x) / Tastenfeld

Um mit dem Keypad arbeiten zu können, benötigt man eine Library welche noch nicht im Arduino Programm vorinstalliert ist. Für diese Anleitung verwenden wir die Library „Keypad“ von Mark Stanley und Alexander Brevig. Die Library kann über die Bibliothekenverwaltung der Arduino-Software hinzugefügt werden. Als Suchbegriff verwendet man den Namen „Keypad“. Eine detaillierte Beschreibung, wie Bibliotheken eingefügt werden findet man im Theorieteil zu dieser Anleitung im Unterpunkt „Bibliotheken zur Arduinosoftware hinzufügen“.

Das Tastenfeld besteht aus einem 3×4 Tasten großem Feld mit 12 Tasten, oder einem  4×4 Tasten großem Feld mit 16 Tasten. Um die Funktionsweise zu verstehen muss man sich das Keypad wie ein Koordinatensystem vorstellen. Jede Taste ist mit zwei Pins verbunden; ein Pin für die Spalten(COLS) und einer für die Zeilen (ROWS). Wird eine Taste gedrückt, werden die entsprechenden Pins miteinander verbunden. Diese Pins werden vom Arduino-Mikrocontroller mit der digitalRead() Funktion auslesen, jedoch findet diese Abfrage durch die Nutzung der Library versteckt statt und muss nicht separat vorgenommen werden. Wie auch bei der Nutzung anderer Libraries bleibt der Sketch dadurch übersichtlicher.

Der Sketch:

#include <Keypad.h>
//Hier wird die größe des Keypads definiert
const byte COLS = 3; //3 Spalten
const byte ROWS = 4; //4 Zeilen
//Die Ziffern/Zeichen:
char hexaKeys[ROWS][COLS]={
{'#','0','*'},
{'9','8','7'},
{'6','5','4'},
{'3','2','1'}
};
byte colPins[COLS] = { 8, 7, 6 }; //Definition der Pins für die 3 Spalten
byte rowPins[ROWS] = { 5, 4, 3, 2 };//Definition der Pins für die 4 Zeilen
char Taste; //pressedKey entspricht in Zukunft den gedrückten Tasten
Keypad Tastenfeld = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //Das Keypad kann absofort mit myKeypad angesprochen werden
void setup() {
Serial.begin(9600);
}

void loop() {
Taste = Tastenfeld.getKey(); //pressedKey entspricht der gedrückten Taste
if (Taste) { //Wenn eine Taste gedrückt wurde
Serial.print("Die Taste ");
Serial.print(Taste);
Serial.print("wurde gedrueckt");
Serial.println(); //Teile uns am Serial Monitor die gedrückte Taste mit
}
}

Verwendung eines 4×4 Tastenfeldes

Für das 4×4 Tastenfeld wird ein anderer Aufbau mit einer anderen Verkabelung

verwendet.

Dies ist ein Beispielsketch zum auslesen eines 4×4-Tastenfeldes:

#include <Keypad.h>
//Hier wird die größe des Keypads definiert
const byte COLS = 4; //4 Spalten
const byte ROWS = 4; //4 Zeilen
//Die Ziffern und Zeichen des Keypads werden eingegeben:
char hexaKeys[ROWS][COLS]={
{'D','#','0','*'},
{'C','9','8','7'},
{'B','6','5','4'},
{'A','3','2','1'}
};

byte colPins[COLS] = {2,3,4,5}; //Definition der Pins für die 4 Spalten
byte rowPins[ROWS] = {6,7,8,9};//Definition der Pins für die 4 Zeilen
char Taste; //Taste ist die Variable für die jeweils gedrückte Taste.
Keypad Tastenfeld = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //Das Keypad kann absofort mit "Tastenfeld" angesprochen werden

void setup() 
{
Serial.begin(9600);
}

void loop() 
{
Taste = Tastenfeld.getKey(); //Mit Unter der Variablen pressedKey entspricht der gedrückten Taste
if (Taste) 
 { //Wenn eine Taste gedrückt wurde
 Serial.print("Die Taste ");
 Serial.print(Taste);
 Serial.print(" wurde gedrueckt");
 Serial.println(); //Teile uns am Serial Monitor die gedrückte Taste mit
}
}

So sollte es aussehen wenn alles gelungen ist:

screen