Crea sito

Tag: keypad

31 Replies

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:

servo_lcd_password

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;
}