Problema keypad

Salve a tutti sto avendo un problema con un sketch per una serratura a combinazione. in poche parole cosa avviene prima funzionava tutto ( durante i test) ora prima di completare il progetto ho fatto un ultimo test ma la serratura si apre sempre.

Prima cosa vi allego lo schema:

ora vi allego anche lo sketch:

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

Il problema è che la serratura si apre sempre, cioè per inserire la password si deve premere * e poi inserire la password ma se è non corretta dovrebbe uscire password errata, ma ora premendo due volte ** si apre la serratura, o mettendo qualsiasi password si apre la serratura non capisco dove sta l’errore nello sketch qualcuno mi potrebbe dare una dritta o una mano, prima funzionava poi ho inserito anche un relè per far spegnere il servo per non tenerlo sempre attivo ma ora come vi dicevo mi si apre sempre la serratura dove sto sbagliando?

Grazie a tutti per l’aiuto.

Ho risolto il problema della password e ora funziona come deve, ho aggiunto true e false ai posti giusti, solo una cosa qualcuno mi sa dire come posso usare la C per cancellare?

Fai una funzione che porta indietro di una posizione il cursore e sovrascrivi quello che hai scritto.

Se ti pare brutto, dopo che il cursore è tornato indietro, ci scrivi sopra un carattere nullo (un vuoto) così nemmeno vedi il numero sbagliato che hai digitato prima.

Devi spulciare nella libreria LiquidCrystal e cercare la funzione che sposta il cursore.

antony 1989 puoi mettermi lo sketch corretto per favore non riesco a capire il corretto posizionamento di true e false

attilio1912:
antony 1989 puoi mettermi lo sketch corretto per favore non riesco a capire il corretto posizionamento di true e false

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

... non solo, ti sei reso conto che sei andato a prendere un post di un anno fa ? ? ? :o

Spera che antony1989 ancora segua il forum ... il suo ultimo post è di dicembre dello scorso anno ... ::slight_smile:

Guglielmo