Arduino - Keypad

De keypad wordt veel gebruikt in verschillende apparaten zoals deursloten, pinautomaten, rekenmachines...

In deze handleiding leert u:

Hardware benodigd

1×Arduino Uno R3
1×USB 2.0 kabel type A/B
1×Toetsenbord 3x4 en 4x4 Kit
1×(Alternatief) Keypad 3x4
1×(Alternatief) Keypad 4x4
1×Jumper Draden
1×(Aanbevolen) Schroefklem Block Shield voor Arduino Uno
1×(Aanbevolen) Breadboard-Shield voor Arduino Uno
1×(Aanbevolen) Behuizing voor Arduino Uno
1×(Aanbevolen) Prototyping Basisplaat & Breadboard Kit voor Arduino Uno

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over de Keypad

Keypad

De keypad is een set knoppen die zijn gerangschikt in rijen en kolommen (ook wel matrix genoemd). Elke knop wordt een key genoemd.

Er bestaan verschillende types keypad. Twee populaire types voor doe-het-zelf projecten zijn keypad 3x4 (12 toetsen) en keypad 4x4 (16 toetsen).

Pinout

De pins van het keypad zijn verdeeld in twee groepen: rij (row) en kolom (column).

Een keypad 3x4 heeft 7 pins: 4 rij-pins (R1, R2, R3, R4) en 3 kolom-pins (C1, C2, C3).

Een keypad 4x4 heeft 8 pins: 4 rij-pins (R1, R2, R3, R4) en 4 kolom-pins (C1, C2, C3, C4).

Keypad Pinout

Hoe het werkt

Deze sectie is gewijd aan diepgaande kennis. Maak u GEEN zorgen als u het niet begrijpt. Sla deze sectie over als deze u overweldigt en kom op een andere dag terug. Lees verder met de volgende secties.

Het detecteren van een druk op een toets heet het scannen van het keypad.

Het wordt “scannen” genoemd omdat het toets voor toets controleert.

De rij-pins zijn verbonden met de output-pinnen van de Arduino.

De kolom-pins zijn verbonden met de input-pinnen van de Arduino (INPUT_PULLUP; in deze toestand is de waarde van de input-pin HIGH als er geen toets wordt ingedrukt).

Voor elke rij:

  • Worden alle rij-pins op HIGH gezet.
  • Wordt alleen de huidige rij-pin op LOW gezet.
  • Wordt de status van elke kolom gelezen.
    • Als een kolom-pin HIGH is ⇒ toets bij (rij, kolom) is NIET ingedrukt.
    • Als een kolom-pin LOW is ⇒ toets bij (rij, kolom) is ingedrukt.
  • Wordt het bovenstaande proces herhaald voor de volgende rij-pins.

※ Notiz:

Bovenstaande is één van de methodes om het keypad te scannen. We kunnen alle HIGH en LOW ook omkeren om het keypad te scannen.

Waarom is het keypad op deze matrix-manier gerangschikt en verbonden? Dit maakt het scanproces ingewikkelder. Waarom gebruiken we niet elke toets als een onafhankelijke knop, zodat de status eenvoudig te bepalen is door elke knop apart uit te lezen?

⇒ Zoals bekend heeft iedere onafhankelijke knop één Arduino-pin en GND nodig. Laten we keypad 4x4 als voorbeeld nemen. Als we elke toets als een afzonderlijke knop zouden gebruiken, zijn daarvoor 16 Arduino-pinnen nodig plus GND. Door toetsen in een matrix te rangschikken, gebruiken we slechts 8 Arduino-pinnen, waardoor we Arduino-pinnen besparen. Kortom, het antwoord is: om Arduino-pinnen te besparen.

Aansluitschema

Arduino Keypad Aansluitschema

This image is created using Fritzing. Click to enlarge image

Hoe programmeer je voor keypad

Dankzij de Keypad library is het gebruik van een keypad met Arduino zeer eenvoudig, ongeacht of u begrijpt hoe het keypad werkt of niet.

Arduino Code

Keypad 3x4

#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); } }

Keypad 4x4

#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); } }

Snel aan de slag

  • Navigeer naar het Libraries icoon in de linker zijbalk van de Arduino IDE.
  • Zoek naar “keypad” en vind de keypad library van Mark Stanley en Alexander Brevig.
  • Klik op de Install knop om de keypad library te installeren.
Arduino keypad library
  • Kopieer bovenstaande code en open deze met de Arduino IDE.
  • Klik op de Upload knop in de Arduino IDE om de code naar de Arduino te uploaden.
  • Open de Seriële Monitor.
  • Druk op enkele toetsen van het keypad.
  • Bekijk het resultaat in de Seriële Monitor.
COM6
Send
3 6 9 4 - #
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Keypad en Wachtwoord

Een populaire toepassing van een keypad is het invoeren van een wachtwoord. In deze toepassing specificeren we twee speciale toetsen:

  • Een toets om het invoeren van het wachtwoord te starten / opnieuw te starten. Bijvoorbeeld de toets "*".
  • Een toets om het invoeren van het wachtwoord te beëindigen. Bijvoorbeeld de toets "#".

Het wachtwoord is een tekenreeks met de overige toetsen, behalve de twee geselecteerde speciale toetsen.

Wanneer een toets wordt ingedrukt:

  • Als de toets NIET "*" of "#" is, wordt de toets toegevoegd aan de door de gebruiker ingevoerde wachtwoordtekenreeks.
  • Als de toets "#" is, wordt de door de gebruiker ingevoerde tekenreeks vergeleken met het wachtwoord om te bepalen of het wachtwoord correct is, en wordt daarna de ingevoerde wachtwoordtekenreeks gewist.
  • Als de toets "*" is, wordt de door de gebruiker ingevoerde wachtwoordtekenreeks gewist.

Keypad - Wachtwoord Code

/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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 } } }
  • Voer bovenstaande code uit.
  • Open de Seriële Monitor.
  • Druk op de toetsen "123456" en vervolgens op "#".
  • Druk op de toetsen "1234" en vervolgens op "#".
  • Bekijk het resultaat in de Seriële Monitor.
COM6
Send
password is incorrect, try again password is correct
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Daag uzelf uit

  • Toon de ingedrukte toets van het keypad op een LCD. Tip: Zie Arduino - LCD
  • Maak een deurslot met wachtwoordbeveiliging met behulp van het keypad.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!