Folientastatur

Hier werden zwei verschiedene Bauformen einer Folientastatur mit dem Arduino ausprobiert.

Verwendete Bauteile

3-Tasten Folientastatur

3-Tasten Folientastatur

Anschlüsse

Der Anschluss 1 (COM) kann direkt an GND des Arduino angeschlossen werden, die anderen drei Pins an jeweils einen digitalen Eingang des Arduino. Wichtig ist nur, dass der interne Pullup-Widerstand des Arduino aktiviert wird.

Anschlüsse der 3-Tasten Folientastatur

Code

Der folgende Sketch gibt die Zustände der Tasten aus, d.h. "1" im Normalzustand und "0", wenn die entsprechende Taste gedrückt wurde.

#define PIN_ARROW_LEFT  7
#define PIN_ARROW_RIGHT 6
#define PIN_FUNCTION    5

#define NUM_BUTTONS 3

const int buttonPin[] = {PIN_FUNCTION, PIN_ARROW_RIGHT, PIN_ARROW_LEFT};

void setup()
{
    Serial.begin(9600);
    for(byte i=0; i<NUM_BUTTONS; i++) {
        pinMode(buttonPin[i], INPUT_PULLUP);
    }
}

void loop()
{
    for(byte i=0; i<NUM_BUTTONS; i++) {
        Serial.print(digitalRead(buttonPin[i]));
        Serial.print(" ");
    }
    Serial.print("\n");
    delay(500);
}
Ausgabe des obigen Beispiels in der seriellen Konsole
Abb.: Ausgabe des obigen Beispiels in der seriellen Konsole (0=Taste wurde gedrückt)

4x4-Matrix Folientastatur

4x4-Matrix Folientastatur

Funktionsweise

Um für das Auslesen eines Tastendrucks der 16 Tastenschalter nicht auch 16 Pins am Arduino zu verwenden werden hier durch Multiplexing nur 8 Pins belegt. Die 8 Anschlüsse aus der Folientastatur kommen an 8 Digitalpins des Arduino. 4 Pins dienen dem Arduino dabei als Ausgang und sind mit den 4 Zeilen des Keypads verbunden. Die anderen 4 Pins werden als Eingänge verwendet und sind mit den Spalten verbunden. An den jeweiligen Kreuzungen liegt ein Membranschalter, der im gedrückten Zustand die Verbindung zwischen Zeile und Spalte herstellt.
Zur Abfrage eines Tastendrucks wird nicht das gesamte Tastenfeld gleichzeitig überwacht, sondern es werden die einzelnen Zeilen in jeweils kurzen Abständen mit Strom versorgt, d.h. das zugehörige Ausgangspin am Arduino geht auf HIGH. Wird in dieser Zeit eine Taste in dieser Zeile gedrückt, so schließt sich der Membranschalter und am zugehörigen Eingangspin, das an dieser Spalte angeschlossen ist, wird am Arduino ein HIGH messbar. Da man jetzt weiß, welche Zeile gerade mit Strom versorgt wird und welche Spalte sich als HIGH zurückmeldet, muss der Schalter am Schnittpunkt von Zeile und Spalte gerade gedrückt sein. Das alles passiert in Zyklen von Millisekunden, sodass auch garantiert jeder Tastendruck erkannt wird.
Dafür kann man z.B. die Library Keypad verwenden.

Schaltplan der 4x4-Matrix Folientastatur
Abb.: Schaltplan der 4x4-Matrix Folientastatur
Anschlüsse der 4x4-Matrix Folientastatur
Abb.: Anschlüsse der 4x4-Matrix Folientastatur (Rx = Rows/Reihen; Cx = Columns/Spalten)
Verbindung der 4x4-Matrix Folientastatur zum Arduino
Abb.: Verbindung der 4x4-Matrix Folientastatur zum Arduino

Code

Der folgende Sketch liest die einzelnen Tasten des 4x4-Matrix-Keypads mit Hilfe der Keypad-Library aus und gibt sie auf der seriellen Konsole aus. Die Anschlüsse sind im obigen Bild zu sehen.

#include <Keypad.h>

const byte ROWS = 4;
const byte COLS = 4;

char hexaKeys[ROWS][COLS] = {
    {'1', '2', '3', 'A'},
    {'4', '5', '6', 'B'},
    {'7', '8', '9', 'C'},
    {'*', '0', '#', 'D'}
};

byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};

Keypad keypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

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

void loop()
{
    char key = keypad.getKey();
    if (key){
        Serial.print(String(key) + " ");
    }
}
Ausgabe des obigen Beispiels in der seriellen Konsole
Abb.: Ausgabe des obigen Beispiels in der seriellen Konsole (0=Taste wurde gedrückt)
zurück