Arduino tutorial: Matrix KeyPad 4×4

136 views 1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5,00 out of 5)

Loading...

circuito matrix keypad 4×4

Occorrente per questo circuito:
-1x Arduino UNO
-1x Matrix KeyPad 4×4
-4x Resistenze da 10 KOhm
-wipe jumpers

Cari ragazzi, questo circuito è “leggermente” più difficile di quello precedente, soprattutto per il codice della sketch che andremo a scrivere insieme in questo tutorial e anche per il fatto che questo componente, ovvero il tastierino, utilizza dal Pin 2 al Pin 9. 8 Pin non è tantissimo, tenendo presente che la matrice di LED che studieremo più avanti ne usa 16, praticamente tutti.

Creazione Circuito: I primi quattro Pin della matrice vanno collegati con i Pin di Arduino rispettivamente dal 5 al 2 e questi primi quattro comanderanno le righe (se togliete l’adesivo sul retro si vede il perché). Gli ultimi 4 Pin della matrice vanno collegati, con una resistenza da 10 KOhm, al Pin GND (-) e ai Pin digitali di Arduino dal 9 al 6. (se non capite bene seguite il disegno o commentate sotto) Per il circuito è tutto, possiamo iniziare a compilare la parte di software…

Struttura Codice: Una volta aperto l’IDE di Arduino, iniziate definendo i numeri dei Pin che utilizzeremo per il nostro tastierino ovvero 5,4,3,2 e la stessa cosa per le righe con i pin 6,7,8,9. Ci sarebbe una libreria che in un attimo sistemerebbe la prossima parte di codice, ma io per sperimentare quale carattere si accende, attivando righe e colonne, ho aggiunto manualmente questa breve parte di codice per capire il funzionamento al meglio. Ho dimensionato un’array bidimensionale di stringhe con 4 righe e 4 colonne proprio come il tastierino 4×4 e ho inserito i caratteri della matrice.

int COL[] = {5,4,3,2};
int RIG[] = {6,7,8,9};
const char* CHAR[4] [4] = {
{"A", "B", "C", "D"},
{"3", "6", "9", "#"},
{"2", "5", "8", "0"},
{"1", "4", "7", "*"}
}; 

Nella funzione setup dobbiamo solamente inizializzare i pin come OUTPUT o INPUT per semplificarci la vita utilizziamo un ciclo for, la cui sintassi è uguale al C++, in modo da inizializzare tutte le colonne come OUTPUT e le righe come INPUT. Inizializziamo inoltre la comunicazione con la seriale a 9600 baud in modo da poter stampare i tasti che premiamo.

void setup() {
Serial.begin(9600);
  for(int i = 0; i < 4; i++){
     pinMode(COL[i], OUTPUT);
     pinMode(RIG[i], INPUT);
  }
}

La funzione loop è invece più complessa è presenta una struttura nidificata tripla formata da due cicli for e un controllo if. Dentro il primo ciclo accendiamo con la funzione digitalWrite le colonne e subito dopo creiamo un altro ciclo, con una variabile contatrice diversa, dove assegniamo alla variabile lettura il valore letto dalla riga che si incrementa a ogni ciclo concluso. Ho aggiunto all’interno di questo secondo ciclo un controllo che mi stampi il valore solo della riga che si accende quando premo il pulsante; il programma, sfruttando il codice precedentemente steso, riconosce il carattere premuto e lo stampa sul monitor seriale assieme a uno spazio per rendere più leggibile lo scritto. La funzione String serve per trasformare in stringa quello che c’è all’interno della parentesi mentre il + serve per concatenare più stringhe. Aggiungo un ritardo di 300 millisecondi altrimenti mi visualizzerebbe troppi caratteri uguali alla volta anche per una pressione non prolungata. Appena prima di chiudere la parentesi graffa del primo ciclo for spegniamo la colonna che abbiamo utilizzato per evitare di avere più colonne accese contemporaneamente. Così ogni ciclo accende la colonna corrispondente alla variabile del contatore e, finite le operazioni su di essa, la spegne per poi riaccendere quella successiva.

void loop() {
  for(int i = 0; i < 4; i++){
    digitalWrite(COL[i], HIGH);
    for(int j = 0; j < 4; j++){
      int lettura = digitalRead(RIG[j]);
      if(lettura == HIGH){ 
        Serial.print(String(CHAR[j][i]) + " ");
        delay(300);
        }
      }
    digitalWrite(COL[i], LOW);
    }
  }

Ok ragazzi, spero che dopo questo tutorial abbiate capito il funzionamento della matrice di pulsanti o Matrix KeyPad 4×4 e che abbiate imparato nuovi comandi e nuove nozioni sul funzionamento di Arduino. Ripeto l’ultima cosa: raccomando a tutti di non omettere le resistenze sui pin delle righe della matrice perché è un circuito anti-rimbalzo che evita di captare segnali casuali in base all’aria. Vi assicuro che senza da moltissimi problemi nella lettura dei valori. Approfondirò questo tipo di circuito in un altro tutorial a breve. Quindi continuate a seguire la pagina per rimanere aggiornati su nuovi articoli di applicazioni e software che rilascerò e ovviamente sulla continuazione dei tutorial di Arduino. Vi aspetto nei commenti…
Fabio Java

Precedente Arduino tutorial parte 1.2: accendere un LED da un pulsante Successivo Arduino tutorial parte 1.3: usare un pulsante come interruttore di un LED