Insert parameters e password whith Arduino + LCD + Keypad + Servo
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; }