Il tastierino numerico è una periferica di input, ne esistono di vari formati. I tasti sono disposti in formato matriciale. La struttura a righe e colonne, permette di verificare con l’ausilio di un microcontrollore quale dei tasti è stato digitato tramite la lettura dei pin di output del tastierino stesso.
In questo articolo vedremo la gestione delle tastiere a matrice tramite Arduino.
Indice
Tastiera a tasti
Il tastierino visibile in figura ha 16 tasti (4×4) e presenta un’uscita con 8 pin che permettono la lettura della matrice righe/colonne.
Sono disponibili anche delle tastiere 4×3, la cui struttura è simile alla precedente
Tastiera a membrana
Oltre alla tastiere a tasti meccanici, sono disponibili delle tastiere a membrana. Come per il modello precedentemente descritto, sono disponibili sia a matrice 4×4 che 4 x3.
Le tastiere a membrana sono meno costose di quelle a tasti, sono sottili e hanno anche un supporto adesivo in modo da poterle attaccare alla maggior parte delle superfici piatte.
Pin delle tastiere
Tastiera meccanica 4×3
Pin | Colonna/riga | Tasto | |
---|---|---|---|
1 | Colonna 2 | 2,5,8,0 | |
2 | Riga 1 | 1,2,3 | |
3 | Colonna 1 | 1,4,7,* | |
4 | Riga 4 | *,0,# | |
5 | Colonna 3 | 3,6,9,# | |
6 | Riga 3 | 7,8,9 | |
7 | Riga 2 | 4,5,6 |
Tastiera a membrana 4×3
Pin Colonna/riga Tasto 1 Riga 1 1,2,3 2 Riga 2 4,5,6 3 Riga 3 7,8,9 4 Riga 4 *,0,# 5 Colonna 1 1,4,7,* 6 Colonna 2 2,5,8,0 7 Colonna 3 3,6,9,#
Tastiera meccanica/membrana 4×4
Pin | Colonna/riga | Tasto | |
---|---|---|---|
1 | Riga 1 | 1,2,3,A | |
2 | Riga 2 | 4,5,6,B | |
3 | Riga 3 | 7,8,9,C | |
4 | Riga 4 | *,0,#,D | |
5 | Colonna 1 | 1,4,7,* | |
6 | Colonna 2 | 2,5,8,0 | |
7 | Colonna 3 | 3,6,9,# | |
8 | Colonna 4 | A,B,C,D, |
Dove trovare le tastiere
Le tastiere potranno essere acquistate presso il sito Homotix, sono disponibili:
- Tastiera 4×4 codice prodotto HMTTAS16 al costo di 3,92 €
- Tastiera 4×3, codice prodotto HMTTAS12 al costo di 3,92 €
- Tastiera a membrana 4×4 codice prodotto HMTTAS16M al costo di 1,72 €
- Tastiera a membrana 4×3, codice prodotto HMTTAS12M al costo di 1,72 €
Se lo acquisterete presso il sito potrete usufruire di uno sconto del 3% inserendo lo speciale codice sconto riservato agli utenti del sito ADRIROBOT.
Le tastiere sono inoltre disponibili presso il sito FUTURA ELETTRONICA, sono disponibili:
- Tastiera 4×4 codice prodotto 5150-TST16 al costo di 7,90 €
- Tastiera 4×3, codice prodotto 5150-TST12 al costo di 5,30 €
- Tastiera a membrana 4×4 codice prodotto 2846-TST16MEMB al costo di 3,60 €
- Tastiera a membrana 4×3, codice prodotto 1606-TST12MEMB al costo di 3,20 €
Libreria KeyPad
Per facilitare la gestione delle tastiere a matrice con Arduino è possibile utilizzate apposite librerie.
Queste possono essere scaricate utilizzando l’apposita funzione fornita dall’IDE.
Vi basterà ricercare “keypad“, e vi saranno mostrate varie librerie, personalmente ho scelto quella realizzata da Mark Stanley e Alexander Brevig.
Se avete dubbi sull’utilizzo delle librerie, leggete anche l’articolo Arduino – Tutorial, come installare una libreria
Funzioni della libreria KeyPad
void begin(makeKeymap(userKeymap))
Inizializza la mappa della tastiera, è uguale a userKeymap
char waitForKey()
Questa funzione resta in attesa di una pressione di un tasto
Attenzione: la funzione blocca l’esecuzione del programma fino a quando non viene premuto un tasto, ad esempio non lampeggiano i LED e non viene aggiornato lo schermo LCD.
char getKey()
Restituisce il tasto che viene premuto, se presente. Questa funzione non blocca l’esecuzione del programma.
KeyState getState()
Restituisce lo stato attuale di uno qualsiasi dei tasti. I quattro stati sono IIDLE, PRESSED, RELEASED e HOLD
boolean keyStateChanged()
Permette di sapere se vi è stato un cambiamento di stato.
setDebounceTime(unsigned int time)
Imposta la quantità di millisecondi che l’utente dovrà tenere premuto un pulsante fino a quando lo stato HOLD è attivato.
setDebounceTime (tempo unsigned int)
Imposta la quantità di millisecondi che la tastiera attenderà fino a che non accetta una nuova pressione del tasto / KeyEvent. Questo è il “tempo di ritardo” metodo anti rimbalzo.
addEventListener(keypadEvent)
Attivare un evento se la tastiera è utilizzata.
Esempio schema minimo di collegamento
Materiale necessario
Uno R3 ATmega328 Arduino Compatibile | Breadboard |
Jumper Dupont M/M 200mm | Tastiera 16 tasti |
Schema dei collegamenti
Sketch di prova
Lo sketch sotto riportato, verifica i collegamenti della tastiera se sono corretti, premendo i vari tasti, attivando il monitor seriale saranno stampati i caratteri riportati sui relativi tasti premuti.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | // Definizione tastiera #include <Keypad.h> const byte ROWS = 4; // Quattro righe const byte COLS = 4; // Quattro colonne // Definizione mappa della tastiera char keys[ROWS][COLS] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte rowPins[ROWS] = { 8, 7, 6, 5 }; // Riga0,1,2,3. byte colPins[COLS] = { 12, 11, 10, 9}; // Colonna0,1,2,3 // Creazione della tastiera Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup() { Serial.begin(9600); } void loop() { char key = kpd.getKey(); if (key) { Serial.println(key); } |
Gestione di due relè tramite tastiera
Materiale necessario
Uno R3 ATmega328 Arduino Compatibile | Breadboard |
Jumper Dupont M/M 200mm | Tastiera 16 tasti |
2 moduli relè – 5V es. modulo KY-019 |
Schema dei collegamenti
Sketch comando relè
Lo sketch sotto riportato, gestisce due moduli relè, per attivarli occorre premere:
I tasti 1 e 4 per il relè 1, il tasto 1 attiva, il tasto 4 disattiva)
I tasti 2 e 5 per il relè 2, il tasto 2 attiva, il tasto 5 disattiva)
NOTA: dato che la disposizione dei pin dei moduli relè non è standard, occorre verificare quella del proprio modello. Anche il circuito di comando della bobina del relè non è standard, alcune bobine si eccitano tramite il comando HIGH e altri con il comando LOW, nel caso modificare lo sketch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | //Definisce i pin per comandare i rele' const int rele_1 = 3; // Relè 1 const int rele_2 = 4; // Relè 2 // Definizione tastiera #include <Keypad.h> const byte ROWS = 4; // Quattro righe const byte COLS = 4; // Quattro colonne // Definizione mappa della tastiera char keys[ROWS][COLS] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte rowPins[ROWS] = { 8, 7, 6, 5 }; // Riga0,1,2,3. byte colPins[COLS] = { 12, 11, 10, 9}; // Colonna0,1,2,3 // Creazione della tastiera Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup() { // imposta i pin digitali come uscite: pinMode(rele_1, OUTPUT); pinMode(rele_2, OUTPUT); digitalWrite(rele_1, HIGH); digitalWrite(rele_2, HIGH); } void loop() { char key = kpd.getKey(); if (key) // controlla che il valore sia valido. { switch (key) { case 49: //valore ascii del numero 1 digitalWrite(rele_1, HIGH); break; case 50: //valore ascii del numero 2 digitalWrite(rele_2, HIGH); break; case 52: //valore ascii del numero 4 digitalWrite(rele_1, LOW); break; case 53: //valore ascii del numero 5 digitalWrite(rele_2, LOW); break; } } } |