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


31 thoughts on “Insert parameters e password whith Arduino + LCD + Keypad + Servo

    Giacomo 87
    on said:

    ciao, intanto volevo farti i complimenti per i progetti davvero interessanti!! premetto che sono solo un appassionato di elettronica e ho comprato arduino per avvicinarmi al mondo della programmazzione! ad ogni modo, ho provato a replicare il tuo progetto copiando e incollando volgarmente lo sketch e mi da un errore negli ultimi dati :

    “Keypad keyp = Keypad(makeKeymap(Keys), rowPins, colPins,4,4);
    Servo myservo;”

    volevo chiederti se devo importare qualche libreria o altro perche semplicemente realizzando lo schema come da immagine e provando a inviare lo sketch non riesco a trovare il problema!! grazie mille per l’attenzione!! ciao!

      Noobs
      on said:

      Ciao,

      Il problema era dovuto al mio sito. ultimamente ho cambiato il tema del sito e nel migrare gli articoli,non so perché, si sono persi dei pezzi di codice.
      Come dici tu mancava proprio la parte in cui includevo le librerie! adesso ho corretto il codice, l’ho compilato e non da errori.
      Grazie per la segnalazione!

        Marco
        on said:

        Ciao nello sketch il servo e un pin della tastiera sono collegati allo stesso pin
        byte rowPins[4] = { 9,8,7,6};
        myservo.attach(9);

        Dove sta l’errore?
        Complimenti comunque Marco

    Noobs
    on said:

    L’errore è mio che dopo ever provato lo sketch, ho cambiato il pin del servo senza accorgermi che era già in uso. Grazie per la segnalazione, ho corretto sia lo schema che lo sketch, rimettendo il servo al pin A4

    rudy
    on said:

    ciao
    complimenti per lo sketch solo che ho un problema : gia prima di inserire la password il servo è alimentato perchè , e poi quando inserisco la password corretta il servo gira di 180°
    e poi riprende la sua posizione iniziale , ma rimane alimentato lo stesso perchè sento che fa un pò di rumore , poi ho provato ad attaccare al posto del servo un led e ho visto che in effetti il led rimane accesso , poi quando inserisco la password e mi dice che è corretta il led si illumina di più , e poi torna ad una bassa luminosità come all’inzio .
    ho sbagliato qualcosa ?
    se no … cè un modo per non alimentare la porta ” A4 ” quando non inserisco i dati ?
    grazie

      Noobs
      on said:

      Ciao e scusa per il ritardo.
      Appena parte il programma il servo si posiziona a close_val che corrisponde a “porta chiusa” e nel esempio vale zero gardi.
      Una volta inserita la password il servo si porta a open_val che sarebbe “porta aperta”, che qui vale 180°.
      Devi cambiare questi due valori in base alle tue esigenze.

    Daniel
    on said:

    in questa stringa mi da errore perche?

    Keypad keyp = Keypad(makeKeymap(Keys), rowPins, colPins,4,4);

    l’errore e questo

    sketch_nov06a:14: error: ‘Keypad’ does not name a type
    sketch_nov06a.ino: In function ‘void loop()’:
    sketch_nov06a:35: error: ‘keyp’ was not declared in this scope
    sketch_nov06a.ino: In function ‘boolean get_param(char*, char*, char*, boolean)’:
    sketch_nov06a:66: error: ‘keyp’ was not declared in this scope

    ho fatto copia incola

    grazie

      Daniel
      on said:

      Alla fine ho risolto
      Senti ma se devo aggiungere un pulsante sempre per apertura che codice devo scrivere?
      Grazie

        Daniel
        on said:

        adesso il tutto funziona una meraviglia alla grande direi ma non capisco perche non riesco ad inserire un pulsante che fa l’apertura come se fosse inserito il pass, cioe dal esterno ce il keypad per il password per apertura porta e dal interno solo un pulsante tipo cancello ci provo ci provo ci provo ma non ci riesco e poi non e che capisco tanto il linguaggio
        ti sarei molto grato se potesi darmi una mano .
        Grazie

          Noobs
          on said:

          ciao!

          scusami per il ritardo, ma sono molto impegnato ultimamente.

          prova questo codice; devi collegare un pulsante al pin A5 con la sua resistenza di pulldown. (oppure dichiari il pin INPUT_PULLUP e inverti le letture). premendo il piulsante, il servo dovrebbe muoversi senza richiedere la password.
          fammi sapere se funziona, così faccio un articolo con queste modifiche.


          //Creato da Mohamed Fadiga momodesine@hotmail.it

          #include //include la libreria per la gestione del display LCD
          #include "Keypad.h" //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);
          boolean pressed = false;
          Servo myservo;
          char key='\0';
          int lum_pin=12;
          long inst_time;
          char risp[16];
          byte close_val=0;
          byte open_val=180;
          int open_button=A5;
          void setup()
          {
          pinMode(open_button,INPUT);
          pinMode(lum_pin,OUTPUT);
          analogWrite(lum_pin,0);
          attachInterrupt(0, moove, RISING);
          lcd.begin(16, 2);
          Serial.begin(9600);
          myservo.attach(A4);
          myservo.write(close_val);
          }
          void loop()
          {
          if(digitalRead(open_button)==LOW)pressed=false;
          if((digitalRead(open_button)==HIGH)&&(pressed==false))
          {
          pressed=true;
          moove();
          }
          lcd.clear();
          lcd.print("Premi '*'");
          if(keyp.getKey()=='*')
          {
          analogWrite(lum_pin,255);
          int ans=get_param("Ins. Password","0123456789",risp,true);
          if(ans==1) moove();
          else if (ans==2)
          {
          lcd.print("Pass errata!");
          delay(2000);
          }
          analogWrite(lum_pin,0);
          }
          }

          void moove()
          {
          lcd.clear();
          lcd.print("Apertura...");
          myservo.write(open_val);
          delay(5000);
          lcd.clear();
          lcd.print("Chiusura...");
          myservo.write(close_val);
          }

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

            Daniel
            on said:

            Combina un casino sia sul schermo e non risponde piu a niente ne keypad ne il servo

    Antonio
    on said:

    Ciao ti faccio i complimenti per il tuo progetto e per la guida che hai fatto, lo messa in atto con un arduino uno rev 3 però ti volevo fare una domanda, qualsiasi cosa faccia mi apre sempre la porta, cioè se premo due volte ** la porta si apre, se invece digito un codice errato mi apre lo stesso la serratura, mi sai dire se c’è un errore nello sketch o se può essere causato da un errore di cablaggi? Ho seguito alla lettera i tuoi cablaggi..
    Grazie e ciao.

      Noobs
      on said:

      Ciao,
      Collega l’Arduino al PC e guarda sulla porta seriale se la password che inserisci viene letta correttamente.

        Antonio
        on said:

        Ciao grazie per il tuo aiuto, comunque sono riuscito a risolvere il problema, in poche parole ho dovuto sostituire nel codice i codici 1 e 2 che avevi usato con true e false ( cioè vero o falso), solo che ora non mi funziona più la lettera C per cancellare, tutto questo casino mi è successo dopo che ho aggiornato al nuovo software di arduino, non so cosa sia cambiato, comunque con il vecchio codice ho visto anche se sul display del pc mi comparissero i numeri giusti e sono quelli sono che apre in qualsiasi caso la serratura e la cosa strana è anche se uso il tuo vecchio codice ( vecchio no inteso come obsoleto o altro ma è solo per non confondermi con quello leggermente modificato del mio) la C neanche funziona.
        Sto usando un arduino come ho già detto prima Uno Rev3 il software per caricare è 1.6.3.

        Grazie per il tuo aiuto spero che riesci a darmi una dritta per far funzionare il cursore del C

    Antonio
    on said:

    Tutto risolto grazie per l’aiuto 😀

    Fede0710
    on said:

    a me dice errore durante la cmpilazione, ma non dice ne quale ne dove, come posso fare?

    Ciao complimenti per il tuo progetto… però mi da sempre errore! Questi sono gli errori:
    sketch_nov07a:12: error: expected unqualified-id before ‘else’
    sketch_nov07a:12: error: array bound is not an integer constant before ‘]’ token
    sketch_nov07a:12: error: array bound is not an integer constant before ‘]’ token
    In file included from sketch_nov07a.ino:1:0:
    sketch_nov07a:20: error: ‘Keys’ was not declared in this scope
    C:\Users\Tommaso\Documents\Arduino\libraries\Keypad/Keypad.h:78:31: note: in definition of macro ‘makeKeymap’
    #define makeKeymap(x) ((char*)x)
    ^
    sketch_nov07a.ino: In function ‘boolean get_param(char*, char*, char*, boolean)’:
    sketch_nov07a:112: error: expected ‘;’ at end of input
    sketch_nov07a:112: error: expected ‘}’ at end of input
    expected unqualified-id before ‘else’

    Zaccaria
    on said:

    Ciao a tutti, volevo chiedere se vanno bene tutti i tastierini 4×4 o alcuni non hanno la libreria arduino. Qualcuno lo sa?

    ciao, innanzitutto complimenti per il suo progetto. Le volevo chiedere una cosa:
    stiamo realizzando questo progetto e lo stiamo integrando nel progetto di una casa domotica per l’esame di maturità.
    Premettendo che non me ne intendo molto di arduino, abbiamo dei problemi. dopo aver caricato il programma, (poiché il programma non mi da errore durante la compilazione) sul display LCD 4×3 (da noi usato e modificato nel programma),non riusciamo a vedere niente sul display, si accende solamente. inoltre se colleghiamo il servomotore al circuito il display perde luminosità. se mi riesce a dare qualche consiglio la ringrazio molto.

    #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(12,13,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[3] = {4,3,2};
    byte rowPins[4] = {11,10,9,8};

    char Keys[4][3]= //creo la matrice dei tasti della tastiera.
    {
    {‘1′,’2′,’3’},
    {‘4′,’5′,’6’},
    {‘7′,’8′,’9’},
    {‘*’,’0′,’#’}
    };

    Keypad keyp = Keypad(makeKeymap(Keys), rowPins, colPins,4,3);
    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(A5);
    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)
    {
    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;
    }

    Ciao,

    Inanzi tutto dammi pure del tu.
    E’ strano che vi compili, mi sono appena accorto nell’aggiornare il blog, mi ha perso i “< " e i ">“, quindi mancava la parte in cui include le librerie.
    adesso ho corretto, provate e fatemi sapere.

    Giusy
    on said:

    Ciao, complimenti molto interessante e fatto bene il tuo articolo, mi interesserebbe però sapere come effettuare un codice in questa stessa situazione ma strutturata in questo modo:

    1. Il codice mi chiede di inserire una password dopo il * , e la password corretta che voglio impostare è 1234
    2. se la password inserita non è 1234, allora mi fa vedere a schermo lcd.print(“Password errata!”); e nel frattempo mi rimanda a digitare nuovamente una password.. (ripetendo questa operazione finchè non è corretta la password)
    3. se la password è corretta mi apre la porta con il servomotore ( e questa parte l ‘hai implementata)

    il problema è che non riesco a implementare i punti 1 e 2 che ti ho appena elencato, perchè per come hai strutturato tu il codice mi risulta difficile (dato che sono alle prime armi con arduino)

    Ti ringrazio tantissimo

    saluti Giusy

      Ciao, e scusami per il ritardo, ma sono stato molto occupato.
      Prova questo codice. in pratica ho messo un ciclo while che continua a ciclare finchè non inserisci la password giusta

      //Creato da Mohamed Fadiga momodesine@hotmail.it

      #include <LiquidCrystal.h> //include la libreria per la gestione del display LCD
      #include <Keypad.h> //include la libreria per la gestione del keypad
      #include <Servo.h> //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;
      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);
      while (get_param(“Ins. Password”, “0123456789”, true) != 1)
      {
      lcd.print(“Pass errata!”);
      delay(2000);
      }
      lcd.print(“Apertura…”);
      myservo.write(open_val);
      delay(5000);
      lcd.clear();
      lcd.print(“Chiusura…”);
      myservo.write(close_val);
      analogWrite(lum_pin, 0);
      }

      boolean get_param(char* question, char* answer, boolean isPassword )
      {
      byte j = 0;
      char param[16] = {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; }

    Giusy
    on said:

    Ciao, ho risolto in questo modo :

    //dichiarazione Servomotore apertura porta
    Servo myservo;
    int pos = 0; //posizione iniziale servo 0 gradi

    /******Gestione Display LCD con interfaccia I2C***********/
    LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // pongo l’indirizzo del display a 0x27

    //Gestione Keypad
    const byte righe = 4; // numero di righe della tastiera (quattro)
    const byte colonne = 4; // numero di colonne della tastiera (quattro)
    char chiave[righe][colonne] = {
    {‘1’, ‘2’, ‘3’, ‘A’},
    {‘4’, ‘5’, ‘6’, ‘B’},
    {‘7’, ‘8’, ‘9’, ‘C’},
    {‘*’, ‘0’, ‘#’, ‘D’}
    };

    byte pinrighe[righe] = {19, 18, 17, 16}; //porte a cui devono essere connessi i pin delle righe (i primi quattro pin di sinistra) della tastiera
    byte pincolonne[colonne] = {13, 12, 11, 10}; //porte a cui devono essere connessi i pin delle colonne (gli ultimi quattro pin di destra) della tastiera

    Keypad keypad = Keypad( makeKeymap(chiave), pinrighe, pincolonne, righe, colonne ); //Assegnazione dei parametri alla libreria keypad.h Keypad
    char key = ‘\0’;
    long inst_time;
    char risp[4];

    void loop(){
    lcd.begin(20, 4); // inizializza il display (20 caratteri per 4 righe)
    lcd.backlight(); // illumina lo sfondo del display
    lcd.clear();
    lcd.setCursor(0, 0); // posiziona il cursore all’inizo della prima riga (carattere 0 e riga 0)
    lcd.print(“Benvenuto!!”); //mostra a schermo
    delay(1000);

    //inserisco il for per permettere la ripetizione della password nel caso in cui non sia corretta
    int n;
    for(n=0; n 0) //la lettera C del tastierino ci permette di cancellare i numeri nel caso sbagliassimo a digitarli
    {
    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 = keypad.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 < 5);
    param[j] = '\0';
    lcd.clear();
    if (key == '*')
    {
    Serial.println(param);
    if (!strcmp(param, answer))return true;
    else return false;
    }
    else return 0;
    }

    Giusy
    on said:

    lcd.begin(20, 4); // inizializza il display (20 caratteri per 4 righe)
    lcd.backlight(); // illumina lo sfondo del display
    lcd.clear();
    lcd.setCursor(0, 0); // posiziona il cursore all’inizo della prima riga (carattere 0 e riga 0)
    lcd.print(“Benvenuto!!”); //mostra a schermo
    delay(1000);

    //inserisco il for per permettere la ripetizione della password nel caso in cui non sia corretta
    int n;
    for(n=0; n 0) //la lettera C del tastierino ci permette di cancellare i numeri nel caso sbagliassimo a digitarli
    {
    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 = keypad.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 < 5);
    param[j] = '\0';
    lcd.clear();
    if (key == '*')
    {
    Serial.println(param);
    if (!strcmp(param, answer))return true;
    else return false;
    }
    else return 0;
    }

    if i want to add buzzer for everytime my password got denied, where should i put it in the circuit? (the connection)

      Hi.

      Buzzers usually have two wires. one goes to GND and the other one goes to any digital pin.
      In this case, you can use pin 0 or 1, if you don’t need serial communication, or pin 13.

    Anonymous
    on said:

    ciao ho un piccolo problema con lo sketch: mi dà tutto giusto tranne la libreria del servomotore.
    qual’è il problema

    Gianni
    on said:

    Ciao, a me non va il progetto: il servo fa rumore ma non si muove e lo schermo neanche si accende.
    soluzione?

    Alessio
    on said:

    Buona sera.. come mai il softowere non rispetta la password che inserisco?? Ad esempio se imposto 123 come pw e poi inserisco sul keypad 456 mi alre uguale… come mai??

Leave a Reply

Your email address will not be published.