Nr.04 – Tastenfeld

Ein Tastenfeld am Arduino verwenden

by Simon Spettmann

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

tastenfeld-aufbau-klein

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 / Stromversorgung

Für die Verwendung des Tastenfelds benötigt man die Keypad Library.

Die Library der Arduino IDE hinzufügen:

-Öffnen Sie die Arduino IDE

-Menüpunkt: Sketch -> Bibliothek einbinden -> Bibliothek verwalten

-mit der Suchzeile nach „Keypad“ suchen, finden und installieren (Version von Mark Stanly)

Das Tastenfeld besteht aus einem 3×4 Feld mit 12 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 kann der Arduino mit der digitalRead() Funktion auslesen. (Das Tastenfeld benötigt keine externe Stromversorgung.) Zur Anschlussbelegung bitte die Definitionen (s.u.) beachten.

fritzing-tastenfeld

 

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 pressedKey; //pressedKey entspricht in Zukunft den gedrückten Tasten

Keypad myKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //Das Keypad kann absofort //mit myKeypad angesprochen werden

void setup() {

Serial.begin(9600);

}

void loop() {

pressedKey = myKeypad.getKey(); //pressedKey entspricht der gedrückten Taste

if (pressedKey) { //Wenn eine Taste gedrückt wurde

Serial.print(„Die Taste „);

Serial.print(pressedKey);

Serial.print(“ wurde gedrueckt“);

Serial.println(); //Teile uns am Serial Monitor die gedrückte Taste mit

}}


Verwendung eines 4×4 Tastenfeldes (folgende Abschnitte werden geändert):

> const byte COLS = 4; //4 Spalten    

> byte colPins[COLS] = { 9, 8, 7, 6 }; //Definition der Pins für die 4 Spalten

> char hexaKeys[ROWS][COLS] = {

{‚D‘, #, 0, *},

{C‘, 9′, 8′, 7′},

{‚B‘, 6, 5, 4′},

{‚A‘, ‚3′, 2, 1′}

};


So sollte es aussehen wenn alles gelungen ist:

screen