Usare un keypad con Arduino

Usare un keypad con Arduino

Oggi vediamo come usare un keypad (tastierino) con Arduino.

Questo modulo si presenta come una sottile tastiera facilmente collegabile ad Arduino. La si potrebbe utilizzare nei modi più disparati, usare una combinazione per aprire una porta ad esempio.

Come si presenta il keypad module

Collegamento

Il collegamento con Arduino è molto semplice. Il sensore ha 8 pin rappresentanti le 4 righe e le 4 colonne. Quando si preme un tasto lo si individua tramite l’intersecazione delle corrispondenti righe e colonne.

Ad ogni modo nel nostro esempio colleghiamo i pin da 1 a 8 rispettivamente ai pin da 2 a 9 di Arduino (1 tastiera con 2 di Arduino, 2 tastiera con 3 di Arduino, ecc).

Codice

Il codice che vediamo oggi è molto semplice e stampa a schermo il tasto premuto.

Questo può essere fatto in due modi, il più semplice è sfruttando una delle tante librerie gratuite presenti sullo store di Arduino IDE (io ho usato quella di Alexander Brevig). La puoi scaricare cercando “keypad” nel menu di ricerca delle librerie di Arduino IDE.

Scaricando la libreria troverai anche il sorgente seguente tra gli esempi. Lo riporto completo di commenti per darne merito agli autori.

Ho modificato solo la matrice hexaKeys inserendo la configurazione della mia tastiera e ho inserito i pin di Arduino in rowPins e colPins.

/* @file CustomKeypad.pde
|| @version 1.0
|| @author Alexander Brevig
|| @contact [email protected]
||
|| @description
|| | Demonstrates changing the keypad size and key values.
|| #
*/
#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad

//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 

void setup(){
  Serial.begin(9600);
}
  
void loop(){
  char customKey = customKeypad.getKey();
  
  if (customKey){
    Serial.println(customKey);
  }
}

Come dicevo c’è anche la possibilità di fare le stesse operazioni senza utilizzare librerie esterne. Metto qui sotto la funzione per leggere il tasto premuto solo per eventuali curiosità. Rimane sempre più comodo usare la libreria. Gli 8 pin della tastiera vanno impostati come INPUT ad HIGH e poi, premendo il tasto viene rilevato un segnale LOW sui pin che si incrociano su di esso.

char getKey()
{
  char key = 0;                                  

  for(int column = 0; column < COLS; column++)
  {
    digitalWrite(colPins[column],LOW);         
    for(int row = 0; row < ROWS; row++)     
    {
      if(digitalRead(rowPins[row]) == LOW)    
      {
        delay(30);                     
        while(digitalRead(rowPins[row]) == LOW); 
        key = hexaKeys[row][column];               
      }
    }
    digitalWrite(colPins[column],HIGH);    
  }
  return key;  
}

Video

Se vuoi ho fatto un video su questo articolo. Guardalo e iscriviti al canale se ti va: https://youtu.be/Rh73WkUCY94

Qualche manuale dedicato ad Arduino

Share This:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.