come usare la libreria keypad, per le tastiere numeriche.
Nella precedente lezione abbiamo visto come collegare e configurare una tastiera a membrana 4×4 su Arduino, tramite l’uso della libreria keypad.h di Mark Stanley.
Oggi vedremo quali comandi riconosce questa libreria e cosa ci permette di fare.
Per chi fosse interessato alla lezione precedente sull’installazione e creazione dello sketch per la tastiera vi riporto il link qui sotto:
La libreria keypad è pensata per migliorare la configurazione delle tastiere a matrice in Arduino, inoltre attiva le resistenze pullup interne di Arudino.
Iniziamo a vedere come lavora all’eterno dello sketch e come scrivere questo per evitare errori:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/* HOBBYEIDEE.ALTERVISTA.ORG Keypad a membrana 4x4 */ #include <Keypad.h> const byte righe = 4; const byte colonne = 4; char tasti [righe][colonne] ={ {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte pinRighe[righe] = {9, 8, 7, 6}; byte pinColonne[colonne] = {5, 4, 3, 2}; Keypad tastiera = Keypad(makeKeymap(tasti), pinRighe, pinColonne, righe, colonne); |
Come prima cosa occorre dichiarare l’uso della libreria tramite comando #include <Keypad.h>.
Successivamente inseriamo due costanti:
1 2 |
const byte righe = 4; const byte colonne = 4; |
Queste rappresentano rispettivamente il numero di righe e di colonne del tastierino, la libreria associa la prima costante al numero di righe e la seconda al numero di colonne.
Fatto questo, passo alla creazione di una mappa del tastierino, tramite una nuova matrice, questa indica alla libreria i pulsanti presenti e la loro posizione.
1 2 3 4 5 6 7 |
char tasti [righe][colonne] ={ {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; |
L’ultima parte da configurare sono i pin di installazione tramite due variabili di tipo byte, che avranno dimensioni sempre uguali alle prime costanti (righe e colonne).
1 2 |
byte pinRighe[righe] = {9, 8, 7, 6}; byte pinColonne[colonne] = {5, 4, 3, 2}; |
Una volta finite queste configuraizoni, arriva la parte forse più importante, la creazione dell’oggetto keypad (io l’ho chiamato “tastiera”), che conterrà i dati inseriti in precedenza in questo ordine:
la mappa dei tasti, i pin di righe e colonne ed il numero di righe e colonne.
1 |
Keypad tastiera = Keypad(makeKeymap(tasti), pinRighe, pinColonne, righe, colonne); |
Adesso possiamo passare alla creazione dello sketch in base alle nostre necessità; in void setup non occorre indicare i pin della tastiera avendolo fatto in precedenza.
Comando | Funzione |
---|---|
char waitForKey() | Mette in attesa lo sketch finché non si preme un pulsante, non vi saranno avanzamenti in nessuna parte di sketch. Ad esempio non vi saranno lampeggi di led o altro. |
char getKey() | Restituisce il tasto premuto. char TASTO = tastiera.getKey(); |
KeyState getState() | Restituisce lo stato attuale di una qualsiasi chiave gli stati possono esse: IDLE, PRESSED, RELEASED, HOLD Rispettivamente: INATTIVO, PREMUTO, RILASCIATO, IN ATTESA Esempio: char TASTO = tastiera.getKey(); int TASTOState = tastiera.getState(); if (TASTOState == uno degli stati ){…..} |
boolean keyStateChanged() | Restituisce quando il pulsante è passato da uno stato all’altro. |
setHoldTime(unsigned int time) | Imposta la durata in millisecondi che il pulsante dovrà essere premuto per passare allo stato HOLD |
setDebounceTime(unsigned int time) | Imposta la durat ain millisecondi che devono passare tra una pressione e l’altra dei pulsanti, utile come funzione antiribalzo |
addEventListener(keypadEvent) | Attiva un evento quando viene utilizzata la tastiera. |