Problema per leggere due stringhe del keypad

salve,

sto cercando un aiuto a livello software.

L'idea era quella di creare un sistema che simula una cassaforte con un tastierino 4x4 e un servo motore. Il circuito deve permettere di visualizzare i tasti premuti su un display e con un particolare codice (es 1234a) postare il servo a 90 gradi mente si si inserisce codice (es 1234c) impostare servo a 0.

io ho trovato su internet un codice e ho cercato di testarlo prima su tinkercard ma ci sono dei paesaggi e variabile che non so cosa servono, volevo chiedere come faccio a controllare se la stringa inserita da tastierino via uguale ad un codice o ad un altro?

sketch_feb03a.ino (2.36 KB)

La funzione tastierino() è da rivedere.

Quando leggi una stringa, finito di leggere la stringa devi aggiungere il carattere terminatore stringa '\0',
altrimenti non hai una stringa valida e le funzioni stringa compreso strcmp() non possono funzionare.

Quindi rivedrei la lettura della stringa.

!strcmp() non funziona, strcmp() restituisce zero quando le due stringhe sono uguali, quindi deve essere

if(strcmp(stringa1,stringa2)==0) sono uguali.

1)Leggo il carattere con getKey();

2)Se il carattere è diverso da NO_KEY "è stato premuto un tasto" e diverso da carattere terminatore
aggiungo la stringa

  1. Premuto il carattere terminatore aggiungo il terminatore stringa alla mia stringa
void tastierino()
{
  
    //servo motore a zero
    prova_servo.write(0); // 90 è il valore dell'angolo 
    lcd.setCursor(0,0);
    lcd.print("  PASSWORD...");

    //Ciclo lettura password
    do{

         customkey=customKeypad.getKey();
         if(customkey!=NO_KEY && customKey != '#'){
          
              Data[data_count] = customKey; 
              lcd.setCursor(data_count,1); 
              lcd.print(Data[data_count]); 
              data_count++; 

         }

    }while(customKey!='#'); //Per terminare la password premo il cancelletto
  
    // E' stato premuto cancelletto la password è stata inserita aggiungo il terminatore
    Data[data_count] = '\0'; 
  
  
    if(strcmp(Data, Master)==0){
        lcd.print(" Pass Corretta");
        //servo motore a zero
        prova_servo.write(90); // 90 è il valore dell'angolo 
        delay(3000);
        prova_servo.write(0); // 90 è il valore dell'angolo 
    }
    else{
        lcd.print("Pass Errata");
        delay(3000);
    }
    
    lcd.clear();
    data_count=0; // Porto il contatore a zero per prossima lettura password  
  
}