Tastenfeld (Keypad) verwenden: 4x4-Codeschloss mit Arduino
Wie funktioniert ein Matrix-Tastenfeld? Anschluss von 4x4- und 3x4-Keypads, Zeilen-Spalten-Abfrage, Bibliothek Keypad, Tasten lesen, Code-Eingabe und Codeschloss mit Servo, Einsatz mit LCD, ESP32 und Pico.
Ein Keypad (Tastenfeld) ist ein günstiges Eingabegerät, ähnlich den Tasten eines Telefons, mit dem du Zahlen oder Buchstaben in dein Projekt eingibst. Codeschlösser für Türen, Tresore, Taschenrechner, Alarmpanels und Menüsysteme entstehen mit Keypads. Am verbreitetsten sind dünne Folientastaturen mit Klebeseite im Format 4x4 (16 Tasten) und 3x4 (12 Tasten).

Wie funktioniert ein Keypad? Die Zeilen-Spalten-Matrix
Hätte jede der 16 Tasten einen eigenen Pin, bräuchtest du 16 Pins. Ein Keypad ordnet die Tasten stattdessen als Matrix an: 4 Zeilen und 4 Spalten, jede Taste sitzt an einem Kreuzungspunkt und verbindet beim Drücken diese Zeile mit dieser Spalte. Der Arduino setzt die Zeilen nacheinander auf LOW und liest die Spalten; welche Spalte LOW ist, während eine bestimmte Zeile LOW ist, verrät die gedrückte Taste. Weil diese Abfrage hunderte Male pro Sekunde läuft, reichen 8 Pins für 16 Tasten.
| Art | Tasten | Pins | Typischer Einsatz |
|---|---|---|---|
| 4x4-Folie | 16 (0–9, A–D, *, #) | 8 | Codes, Menüs, Taschenrechner |
| 3x4-Folie | 12 (0–9, *, #) | 7 | Zifferneingabe wie beim Telefon |
| 1x4-Folie | 4 | 5 | Einfache Menü- und Auswahltasten |
Pinbelegung und Anschluss des Keypads
Mit den Tasten zu dir sind die Pins des Flachbandkabels von links nach rechts meist R1, R2, R3, R4, C1, C2, C3, C4: die ersten vier Zeilen, die letzten vier Spalten. Zusätzliche Widerstände sind nicht nötig; die Bibliothek nutzt für die Spalten die internen Pull-up-Widerstände des Arduino.
| Keypad-Pin | Funktion | Arduino Uno |
|---|---|---|
| 1 | R1 (1, 2, 3, A) | D9 |
| 2 | R2 (4, 5, 6, B) | D8 |
| 3 | R3 (7, 8, 9, C) | D7 |
| 4 | R4 (*, 0, #, D) | D6 |
| 5 | C1 (1, 4, 7, *) | D5 |
| 6 | C2 (2, 5, 8, 0) | D4 |
| 7 | C3 (3, 6, 9, #) | D3 |
| 8 | C4 (A, B, C, D) | D2 |
Tasten mit der Bibliothek Keypad lesen
Suche im Bibliotheksverwalter nach Keypad und installiere die Bibliothek von Mark Stanley und Alexander Brevig. Der folgende Code gibt jede gedrückte Taste im seriellen Monitor aus:
1#include <Keypad.h>
2
3const byte ROWS = 4, COLS = 4;
4char keys[ROWS][COLS] = {
5 {'1', '2', '3', 'A'},
6 {'4', '5', '6', 'B'},
7 {'7', '8', '9', 'C'},
8 {'*', '0', '#', 'D'}
9};
10byte rowPins[ROWS] = {9, 8, 7, 6}; // R1–R4
11byte colPins[COLS] = {5, 4, 3, 2}; // C1–C4
12Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
13
14void setup() {
15 Serial.begin(9600);
16}
17
18void loop() {
19 char key = keypad.getKey(); // tuş yoksa 0 döner / returns 0 if no key
20 if (key) {
21 Serial.println(key);
22 }
23}getKey() blockiert dein Programm nicht: Ist gerade keine Taste gedrückt, gibt es sofort 0 zurück, sodass du in loop() weitere Aufgaben erledigen kannst. Die Bibliothek entprellt die Tasten selbst und meldet jeden Druck nur einmal. Willst du warten, bis eine Taste gedrückt wird, nutze waitForKey().
Ein Codeschloss bauen
Jetzt sammeln wir die gedrückten Tasten in einem Text und vergleichen sie mit einem gespeicherten Code. Die Taste * löscht die Eingabe, # bestätigt sie. Stimmt der Code, öffnet ein Servomotor das Schloss für 3 Sekunden. Zum Servoanschluss siehe Was ist ein Servomotor?
1#include <Keypad.h>
2#include <Servo.h>
3
4const byte ROWS = 4, COLS = 4;
5char keys[ROWS][COLS] = {
6 {'1', '2', '3', 'A'},
7 {'4', '5', '6', 'B'},
8 {'7', '8', '9', 'C'},
9 {'*', '0', '#', 'D'}
10};
11byte rowPins[ROWS] = {9, 8, 7, 6};
12byte colPins[COLS] = {5, 4, 3, 2};
13Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
14
15Servo lock;
16const String PASSWORD = "1234";
17String input = "";
18
19void setup() {
20 Serial.begin(9600);
21 lock.attach(10);
22 lock.write(0); // kilitli / locked
23}
24
25void loop() {
26 char key = keypad.getKey();
27 if (!key) return;
28 if (key == '*') { // temizle / clear
29 input = "";
30 } else if (key == '#') { // onayla / confirm
31 if (input == PASSWORD) {
32 Serial.println("Doğru, açılıyor / correct, opening");
33 lock.write(90);
34 delay(3000);
35 lock.write(0);
36 } else {
37 Serial.println("Yanlış şifre / wrong code");
38 }
39 input = "";
40 } else if (input.length() < 8) {
41 input += key;
42 Serial.print('*'); // tuşu gizle / hide the key
43 }
44}Zusammen mit einem LCD verwenden
Ein Display macht die Codeeingabe viel übersichtlicher. Ein I2C-LCD belegt nur A4 und A5 und kommt den 8 Digitalpins des Keypads nicht in die Quere. Bei jedem Tastendruck schreibst du einen Stern in die untere Zeile und zeigst nach dem Bestätigen oben "Offen" oder "Falsch" an. Anschluss und Befehle des Displays erklärt I2C-LCD-Display verwenden.
Weniger Pins: I2C- und Analog-Keypads
Ein Keypad belegt allein 8 der 20 Pins des Uno. Reichen die Pins nicht, gibt es zwei Lösungen: Ein I2C-Keypad-Adapter mit PCF8574 reduziert das Tastenfeld auf zwei Leitungen und teilt sich den Bus mit dem LCD. Bei Analog-Keypads erzeugt jede Taste einen anderen Widerstand, und das ganze Tastenfeld wird über einen einzigen Analogpin gelesen; das spart Kabel, erkennt aber keine zwei gleichzeitig gedrückten Tasten.
Keypad mit ESP32 und Raspberry Pi Pico
Die Bibliothek Keypad läuft auch auf dem ESP32. Da die Zeilenpins als Ausgänge und die Spaltenpins als Eingänge mit Pull-up dienen, meide GPIO 34–39, die nichts ausgeben können und keine Pull-ups haben; nimm etwa 13, 12, 14 und 27 für die Zeilen und 26, 25, 33 und 32 für die Spalten. Am Pico schreibst du die Abfrage mit MicroPython in wenigen Zeilen selbst:
1from machine import Pin
2import time
3
4KEYS = ["123A", "456B", "789C", "*0#D"]
5rows = [Pin(n, Pin.OUT, value=1) for n in (2, 3, 4, 5)] # R1–R4
6cols = [Pin(n, Pin.IN, Pin.PULL_UP) for n in (6, 7, 8, 9)] # C1–C4
7
8def scan():
9 for r, row in enumerate(rows):
10 row.value(0) # bu satırı etkinleştir / activate this row
11 for c, col in enumerate(cols):
12 if col.value() == 0: # tuş basılı / key pressed
13 row.value(1)
14 return KEYS[r][c]
15 row.value(1)
16 return None
17
18last = None
19while True:
20 key = scan()
21 if key and key != last: # her basışı bir kez yaz / print each press once
22 print(key)
23 last = key
24 time.sleep_ms(50)Projektideen mit dem Keypad
- Codetresor: eine Box, die sich nach Codeeingabe öffnet – mit Servomotor, LCD und Buzzer.
- Taschenrechner: die Tasten A–D als Grundrechenarten nutzen und das Ergebnis auf einem LCD zeigen.
- Farbwähler: die Farbe einer RGB-LED je nach eingegebener Zahl ändern.
- Alarmpanel: eine Alarmanlage mit PIR-Sensor per Code scharf und unscharf schalten.
- Zahlenratespiel: die Zahl des Arduino mit den Hinweisen "größer" und "kleiner" erraten.
- Shortcut-Tastatur: mit einem Arduino Leonardo jede Taste zu einem Tastenkürzel am Computer machen.
Typische Fehler und ihre Lösungen
- Eine andere Taste als die gedrückte wird gelesen: Zeilen und Spalten sind vertauscht; dreh die Reihenfolge der Arrays rowPins und colPins um.
- Gar keine Taste wird gelesen: Das Flachbandkabel steckt um einen Pin versetzt oder die Zeilen- und Spaltenpins weichen vom Code ab.
- Einige Tasten funktionieren nie: Ein Zeilen- oder Spaltenkabel hat Wackelkontakt; fallen alle Tasten einer Zeile oder Spalte aus, ist das das Zeichen.
- Pins 0 und 1 verwenden: Diese Pins dienen der seriellen USB-Kommunikation; mit angeschlossenem Keypad kann das Hochladen fehlschlagen.
- Am ESP32 wirken manche Spalten dauernd gedrückt: Es werden GPIO 34–39 ohne Pull-up genutzt; weich auf andere Pins aus.
- Wiederholung bei langem Drücken erwartet: getKey() meldet jeden Druck einmal; um gehaltene Tasten zu erkennen, nutze den HOLD-Zustand der Bibliothek.
Ein Keypad besteht im Grunde aus Tastern in Matrixanordnung; das Prinzip der Taster findest du in Taster an den Arduino anschließen. In der BlueGrays-App findest du Projekte zu 3x4- und 4x4-Keypads, eine Code-App mit LCD, einen intelligenten elektronischen Tresor, einen I2C-Taschenrechner und die Steuerung einer RGB-LED per Keypad mit Schaltplänen und Code.
Häufige Fragen
Wie viele Pins braucht ein 4x4-Keypad?
Ein 4x4-Keypad braucht 8 Pins: 4 Zeilen und 4 Spalten. Ein 3x4-Keypad braucht 7, ein 1x4-Keypad 5 Pins. Reichen die Pins nicht, kommst du mit einem I2C-Keypad-Adapter auf 2 Leitungen oder mit einem Analog-Keypad auf einen einzigen Analogpin.
Braucht ein Keypad Widerstände?
Nein. Die Bibliothek Keypad aktiviert an den Spaltenpins die internen Pull-up-Widerstände des Arduino, zusätzliche Widerstände sind also nicht nötig. Du kannst das Keypad direkt an Digitalpins anschließen.
An welche Pins gehört ein Keypad?
An beliebige 8 Digitalpins; auch Analogpins lassen sich digital nutzen. Meide beim Uno die Pins 0 und 1, die für die serielle USB-Kommunikation dienen. Am ESP32 verwende keine GPIO 34–39, die nichts ausgeben können und keine Pull-ups haben.
Kann ich zwei gleichzeitig gedrückte Tasten erkennen?
Ja, die Funktion getKeys() der Bibliothek Keypad erkennt bis zu 10 gleichzeitig gedrückte Tasten. Bei Folientastaturen ohne Dioden kann bei manchen Dreierkombinationen allerdings eine nicht gedrückte Taste als gedrückt erscheinen (Ghosting).
Wird ein geänderter Code nach einem Stromausfall vergessen?
Ein in einer Variablen gespeicherter Code springt beim Neustart des Arduino auf den Standardwert im Code zurück. Soll ein neuer Code erhalten bleiben, speichere ihn im EEPROM und lies ihn beim Start von dort.
Wie langlebig ist eine Folientastatur?
Folientastaturen halten meist etwa 1 Million Betätigungen pro Taste aus und lassen sich dank geringer Dicke leicht auf Gehäuse oder Deckel kleben. Gegen Wasser und Staub sind sie nicht vollständig geschützt; draußen nimmt man Keypads mit Metall- oder Silikontasten.
Projekte, die du danach bauen kannst
Alle Projekte ansehen
3x4-Tastenfeld verwenden
Basic-Projekt, das die gedrückte Taste von der 3x4-Tastatur liest und sie auf dem seriellen Monitor anzeigt. Lehrt die Verwendung der Tastaturbibliothek und der Matrixtastatur.

LED-Steuerung mit 3x4-Tastenfeld
Projekt, das 3 LEDs unabhängig voneinander mit 3x4 Tasten ein- und ausschalten und eine Stapelsteuerung durchführen kann. Lehrt die Steuerung mehrerer Ausgänge über die Tastatur.

4x4-Tastenfeld verwenden
Grundlegendes Projekt, das die gedrückte Taste von der 4x4-Tastatur liest und sie auf dem seriellen Monitor anzeigt. Lehrt die Konfiguration der erweiterten 4-Spalten-Tastatur.

Passwortschloss mit 4x4-Tastenfeld und LCD
Sicherheitsprojekt, das die Tür mit einem Servo öffnet, wenn das Passwort mit einer 4x4-Tastatur richtig eingegeben wird, und eine rote LED aufleuchtet, wenn es falsch ist. Lehrt Passwortvergleich und

Arduino Software Entwickler Tastatur
Programmier-Tastatur-Projekt, das Arduino-Code-Blöcke wie if, for, digitalWrite mit einer einzigen Taste mit Arduino Leonardo und 4x4-Tastatur in den Computer schreibt. Lehrt die HID-Tastatur-Emulatio

Intelligenter elektronischer Safe
Smart Electronic Safe ist ein passwortgeschütztes Sicherheitssystem auf Arduino-Basis. Es schaltet den servomotorgesteuerten Schließmechanismus mit dem über die 4x4-Tastatur eingegebenen 4-stelligen P

Arduino I2C-Rechner
Es handelt sich um ein Arduino-basiertes Taschenrechnerprojekt, das Addition, Subtraktion, Multiplikation und Division mit einer 4x4-Folientastatur und einem 16x2 I2C-LCD-Display durchführt. Dank I2C ist der Anschluss des Displays mit nur 2 Kabeln möglich, was den Kabelsalat reduziert und mehr Pins für die Verwendung offen hält. Die Eingabe von Dezimalzahlen und die Unterstützung negativer Zahlen sind ebenfalls möglich.

RGB-Led-Steuerung mit Tastenfeld
Mit diesem Projekt können Sie die RGB-LED über die 4x4-Tastatur zwischen verschiedenen Modi und Farben steuern. Dank der millis()-Struktur werden die Befehle ohne Verzögerung verarbeitet. 🎮 Benutzerhandbuch: Taste A: Feste Geschwindigkeit Überblendeffekt. Taste B: Weicher Übergang mit einstellbarer Geschwindigkeit. C / D: Erhöht / Verringert die Geschwindigkeit des Effekts. 1 - 9: Schnelle Auswahl der Masterfarbe. * / #: Spezielle Zwischenfarben (Rosa, Hellgrün usw.). Taste 0: Schaltet da
Weitere Artikel
Lerne, wie 16 Tasten mit nur 8 Pins gelesen werden, wie du ein Keypad an den Arduino anschließt, Tastendrücke liest und ein Codeschloss baust, das sich mit einem Servomotor öffnet – Schritt für Schritt.

