Servo
Inserire parametri e password con 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; }