In questo articolo vedremo come sfruttare un keypad 4×4 e un display LCD per permettere a l’utente di inserire parametri come dati o password.
Utilizzeremo questo metodo per attivare un servo dopo l’inserimento di una password dalla tastiera
INGREDIENTI:
-1x Arduino UNO
-1x Bredboard
-1x Display LCD
-1x Potenziometro da 10 kΩ (opzionale)
-1x Keypad 4×4
-1x Servo
-Cavetti vari
lo schema da realizzare:
lo scketch per arduino:
//Creato da Mohamed Fadiga momodesine@hotmail.it
#include //include la libreria per la gestione del display LCD
#include //include la libreria per la gestione del keypad
#include //include la libreria per la gestione del servo
LiquidCrystal lcd(10,11,A0,A1,A2,A3); //Imposta i pin di Arduino a quali sono collegati in pin del display (Rs,E,DB4,DB5,DB6,DB7)
byte colPins[4] = {5,4,3,2};
byte rowPins[4] = {9,8,7,6};
char Keys[4][4]= //creo la matrice dei tasti della tastiera.
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
Keypad keyp = Keypad(makeKeymap(Keys), rowPins, colPins,4,4);
Servo myservo;
char key='\0';
int lum_pin=12;
long inst_time;
char risp[16];
byte close_val=0;
byte open_val=180;
void setup()
{
pinMode(lum_pin,OUTPUT);
analogWrite(lum_pin,0);
lcd.begin(16, 2);
Serial.begin(9600);
myservo.attach(A4);
myservo.write(close_val);
}
void loop()
{
lcd.clear();
lcd.print("Premi '*'");
key=keyp.getKey();
while(key!='*')key=keyp.getKey();
analogWrite(lum_pin,255);
int ans=get_param("Ins. Password","0123456789",risp,true);
if(ans==1)
{
lcd.print("Apertura...");
myservo.write(open_val);
delay(5000);
lcd.clear();
lcd.print("Chiusura...");
myservo.write(close_val);
}
else if (ans==2)
{
lcd.print("Pass errata!");
delay(2000);
}
analogWrite(lum_pin,0);
}
boolean get_param(char* question, char* answer, char* param,boolean isPassword )
{
byte j=0;
lcd.clear();
lcd.print(question);
lcd.setCursor(j,1);
lcd.blink();
inst_time=millis();
do
{
lcd.setCursor(j,1);
key=keyp.getKey();
jump_key:
if(key)inst_time=millis();
if((key=='*')||(key=='#'))break;
else if (key=='C'&&j>0)
{
param[j]='\0';
j--;
lcd.setCursor(j,1);
lcd.write(" ");
}
else if(key=='B'||key=='D'||key=='A');
else if (key)
{
param[j]=key;
j++;
lcd.print(key);
if(isPassword)
{
long pass_wait=millis();
do key=keyp.getKey();
while(((millis()-pass_wait)<1000)&&(!key));
lcd.setCursor(j-1,1);
lcd.write('*');
if(key)goto jump_key;
}
}
}
while((millis()-inst_time)<10000&&j<17);
param[j]='\0';
lcd.clear();
if(key=='*')
{
Serial.println(param);
if(!strcmp(param,answer))return 1;
else return 2;
}
else return 0;
}