#include <Wire.h>
#include <LCD03.h>
#include <LiquidCrystal_I2C.h> // Library for LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int numRows = 4; // numero di righe
const int numCols = 4; // numero di colonne
const int debounceTime = 20; // millisecondi necessari allo switch per diventare stabile
// Mappa dei caratteri sul tastierino
const char keymap[numRows][numCols] =
{
{ '1', '2', '3', 'A' } ,
{ '4', '5', '6', 'B' } ,
{ '7', '8', '9', 'C' } ,
{ '*', '0', '#', 'D' }
};
// Definisco i pin connessi alle righe o alle colonne
const int rowPins[numRows] = {9, 8, 7, 6}; // Pin di arduino connessi ai pin 1,2,3 e 4 delle righe del keypad
const int colPins[numCols] = {5, 4, 3, 2}; // Pin di arduino connessi ai pin 5,6,7 e 8 delle colonne del keypad
void setup()
{
lcd.init(); //initialize the lcd
lcd.backlight(); //open the backlight
for (int row = 0; row < numRows; row++)
{
pinMode(rowPins[row],INPUT); // Imposta i pun delle righe come input
digitalWrite(rowPins[row],HIGH); // Imposta le righe a HIGH (inattiva) - abilita le resistenze di pull-ups
}
for (int column = 0; column < numCols; column++)
{
pinMode(colPins[column],OUTPUT); // Setta i pin delle colonne come input
digitalWrite(colPins[column],HIGH); // Imposta le colonne a HIGH (inattiva) - abilita le resistenze di pull-ups
}
}
void loop()
{
lcd.setCursor(1,0);
lcd.print("inserire codice: ");
char codice[4];
for(int i=0; i<4; i++){
if( key != 0) {
char key=getkey();
char codice[i] = key;
}
}
lcd.setCursor(0,1);
lcd.print(codice[4]);
}
// funzione che restituisce il tasto premuto o 0 se nessun tasto è digitato
char getKey()
{
char key = 0; // 0 indica nessun tasto premuto
for(int column = 0; column < numCols; column++)
{
digitalWrite(colPins[column],LOW); // Attiva la colonna corrente per la lettura.
for(int row = 0; row < numRows; row++) // Scorro tutte le righe cercano un tasto premuto
{
if(digitalRead(rowPins[row]) == LOW) // E' premuto il tasto
{
delay(debounceTime); // attendo che il segnale si stabilizzi
while(digitalRead(rowPins[row]) == LOW); // attendo che il tasto sia rilasciato
key = keymap[row][column]; // Memorizzo quale sia il tasto premuto
}
}
digitalWrite(colPins[column],HIGH); // Rendo inattiva la colonna.
}
return key; // restituisce il tasto premuto 0 altrimenti
}