Arduino - Tastaturfeld

Die Tastatur wird in vielen Geräten wie Türschlössern, Geldautomaten und Taschenrechnern eingesetzt.

In diesem Tutorial werden wir lernen:

Erforderliche Hardware

1×Arduino Uno R3
1×USB 2.0 Kabel Typ A/B (für USB-A PC)
1×USB 2.0 Kabel Typ C/B (für USB-C PC)
1×Tastenfeld 3x4 and 4x4 Kit
1×(Alternativ) Tastenfeld 3x4
1×(Alternativ) Tastenfeld 4x4
1×Verbindungskabel
1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno
1×(Empfohlen) Breadboard-Shield für Arduino Uno
1×(Empfohlen) Gehäuse für Arduino Uno
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables STEM V3 Starter-Kit (Arduino enthalten)
1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über das Keypad

Ziffernblock

Das Tastenfeld ist eine Anordnung von Tasten, die in Reihen und Spalten angeordnet sind (Matrix genannt). Jede Taste wird als Taste bezeichnet.

Tastenfelder gibt es in verschiedenen Typen. Zwei beliebte Typen für DIY-Projekte sind das 3x4-Tastenfeld (12 Tasten) und das 4x4-Tastenfeld (16 Tasten).

Pinbelegung

Die Pins des Keypads sind in zwei Gruppen aufgeteilt: Zeile und Spalte.

3x4-Keypad hat 7 Pins: 4 Zeilenpins (R1, R2, R3, R4) und 3 Spaltenpins (C1, C2, C3).

Keypad 4x4 hat 8 Pins: 4 Zeilenpins (R1, R2, R3, R4) und 4 Spaltenpins (C1, C2, C3, C4).

Pinbelegung des Keypads

Wie es funktioniert

Dieser Abschnitt widmet sich vertieftem Wissen. Machen Sie sich KEINE Sorgen, wenn Sie es nicht verstehen. Überspringen Sie diesen Abschnitt, wenn er Sie überfordert, und kommen Sie an einem anderen Tag zurück. Lesen Sie weiter mit den folgenden Abschnitten.

Der Prozess der Erkennung von Tastendrücken wird als Keypad-Scan bezeichnet.

Es wird als „Scannen“ bezeichnet, weil es eine Taste nach der anderen überprüft.

Zeilenpins sind mit den Ausgangspins des Arduino verbunden.

Spaltenpins sind mit den Eingangs-Pins des Arduino verbunden (INPUT_PULLUP, in diesem Zustand ist der Wert des Eingabepins HIGH, wenn die Taste nicht gedrückt ist).

Für jede Zeile:

  • Setzt alle Zeilenpins auf HIGH.
  • Setzt nur den aktuellen Zeilenpin auf LOW.
  • Liest den Zustand jeder Spalte.
    • Wenn ein Spaltenpin HIGH ist ⇒ Taste bei (Zeile, Spalte) NICHT gedrückt.
    • Wenn ein Spaltenpin LOW ist ⇒ Taste bei (Zeile, Spalte) gedrückt.
  • Wiederholt den obigen Prozess für die nächsten Zeilenpins.

※ Notiz:

Das Obige ist eine der Methoden, ein Tastenfeld abzutasten. Wir können alle Hochpegel in Tiefpegel und alle Tiefpegel in Hochpegel invertieren, um das Tastenfeld abzutasten.

Warum ist das Tastenfeld als Matrix angeordnet und verdrahtet? Das macht den Scanvorgang kompliziert. Warum verwendet man nicht jede Taste als eigenständigen Knopf, dann würde der Zustand der Taste einfach durch das Auslesen des Zustands eines Tasters bestimmt?

⇒ Wie wir wissen, benötigt ein einzelner Knopf einen Pin am Arduino und GND. Nehmen wir als Beispiel ein 4x4-Keypad. Wenn jeder Knopf als eigenständiger Taster betrachtet wird, benötigt er 16 Arduino-Pins für 16 Tasten, zuzüglich eines GND-Pins. Wenn wir Tasten in Matrixform anordnen, benötigen wir nur 8 Arduino-Pins, sodass wir Arduino-Pins sparen können. Kurz gesagt: Die Antwort lautet, Arduino-Pins zu sparen.

Verdrahtungsdiagramm

Arduino-Keypad-Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

So programmieren Sie ein Keypad

Dank der Keypad-Bibliothek ist die Verwendung eines Keypads mit Arduino ein Kinderspiel, ganz gleich, ob du verstehst, wie das Keypad funktioniert oder nicht.

Arduino-Code

Ziffernblock 3×4

#include <Keypad.h> const int ROW_NUM = 4; //four rows const int COLUMN_NUM = 3; //three columns char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte pin_column[COLUMN_NUM] = {5, 4, 3}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); void setup(){ Serial.begin(9600); } void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); } }

4x4-Tastenfeld

#include <Keypad.h> const int ROW_NUM = 4; //four rows const int COLUMN_NUM = 4; //four columns char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3', 'A'}, {'4','5','6', 'B'}, {'7','8','9', 'C'}, {'*','0','#', 'D'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); void setup(){ Serial.begin(9600); } void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); } }

Schnelle Schritte

  • Navigieren Sie zum Bibliotheken-Symbol in der linken Leiste der Arduino IDE.
  • Suchen Sie “keypad”, dann finden Sie die keypad-Bibliothek von Mark Stanley, Alexander Brevig
  • Klicken Sie auf die Installieren-Schaltfläche, um die keypad-Bibliothek zu installieren.
Arduino-Keypad-Bibliothek
  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE.
  • Klicken Sie auf die Upload-Schaltfläche in der Arduino IDE, um den Code auf den Arduino hochzuladen.
  • Öffnen Sie den seriellen Monitor.
  • Drücken Sie einige Tasten auf dem Tastenfeld.
  • Sehen Sie das Ergebnis im seriellen Monitor.
COM6
Send
3 6 9 4 * #
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Tastatur und Passwort

Eine beliebte Anwendung des Keypads ist die Passworteingabe. In dieser Anwendung legen wir zwei spezielle Tasten fest:

  • Eine Taste, um die Passworteingabe zu starten bzw. neu zu starten. Zum Beispiel: Taste „*“
  • Eine Taste, um die Passworteingabe zu beenden. Zum Beispiel: Taste „#“

Das Passwort wird eine Zeichenkette sein, die die verbleibenden Schlüssel enthält, mit Ausnahme von zwei ausgewählten Spezialschlüsseln.

Wenn eine Taste gedrückt wird.

  • Wenn der Schlüssel weder '*' noch '#' ist, füge den Schlüssel an die vom Benutzer eingegebene Passwortzeichenfolge an.
  • Wenn der Schlüssel '#' ist, vergleiche die vom Benutzer eingegebene Passwortzeichenfolge mit dem Passwort, um festzustellen, ob das eingegebene Passwort korrekt ist, und lösche anschließend die vom Benutzer eingegebene Passwortzeichenfolge.
  • Wenn der Schlüssel '*' ist, lösche die vom Benutzer eingegebene Passwortzeichenfolge.

Ziffernblock - Passwortcode

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino/arduino-keypad */ #include <Keypad.h> const int ROW_NUM = 4; //four rows const int COLUMN_NUM = 3; //three columns char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte pin_column[COLUMN_NUM] = {5, 4, 3}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); const String password = "1234"; // change your password here String input_password; void setup(){ Serial.begin(9600); input_password.reserve(32); // maximum input characters is 33, change if needed } void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); if(key == '*') { input_password = ""; // clear input password } else if(key == '#') { if(password == input_password) { Serial.println("password is correct"); // DO YOUR WORK HERE } else { Serial.println("password is incorrect, try again"); } input_password = ""; // clear input password } else { input_password += key; // append new character to input password string } } }
  • Führen Sie den obigen Code aus
  • Öffnen Sie den seriellen Monitor
  • Drücken Sie die Tasten '123456' und drücken Sie '#'
  • Drücken Sie die Tasten '1234' und drücken Sie '#'
  • Sehen Sie das Ergebnis im seriellen Monitor
COM6
Send
password is incorrect, try again password is correct
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

Fordere dich heraus

  • Zeige die gedrückte Taste des Keypads auf dem LCD an. Hinweis: Siehe Arduino - LCD
  • Baue ein Türschloss mit Passwortschutz unter Verwendung des Keypads.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!