Password con DTMF (modulo MT8870): come resettare?

Ciao, sto utilizzando questo codice con il modulo in oggetto.

#include <Password.h>
 
int Q1 = 4;
int Q2 = 5;
int Q3 = 6;
int Q4 = 7;
int StD = 8;
int keypressed;
char result;
int pwdlvl = 0;
Password password = Password("8413");
 
void setup() {
 
 Serial.begin(9600);
 
 pinMode(Q1, INPUT);
 pinMode(Q2, INPUT);
 pinMode(Q3, INPUT);
 pinMode(Q4, INPUT);
 pinMode(StD, INPUT);
 
}
 
void loop() {
 
 int toneHeard = digitalRead(StD);
 if (toneHeard == HIGH) {
   delay(250);
   keypressed = interpret();
   Serial.write(keypressed);
   password.append(keypressed);
   pwdlvl++;
   if (pwdlvl == 4){
     Serial.println();
     Serial.print("Guessing password... ");
     delay(500);
     if (password.evaluate()){
         Serial.println("Valid Password");

         password.reset(); /*Reset appended password*/
         pwdlvl = 0; /*Reset the number of appended digits to 0*/
         }
       else {
         Serial.println("Invalid Password");
          password.reset(); /*Reset appended password*/
          pwdlvl = 0; /*Reset the number of appended digits to 0*/
          }
   }
 }
 delay(1);
}
 
int interpret() {
 
  int Q1State = digitalRead(Q1);
  int Q2State = digitalRead(Q2);
  int Q3State = digitalRead(Q3);
  int Q4State = digitalRead(Q4);
 
  if (Q1State == HIGH && Q2State == LOW && Q3State == LOW && Q4State == LOW){result = '1' ;}
  if (Q1State == LOW && Q2State == HIGH && Q3State == LOW && Q4State == LOW){result = '2' ;}
  if (Q1State == HIGH && Q2State == HIGH && Q3State == LOW && Q4State == LOW){result = '3' ;}
  if (Q1State == LOW && Q2State == LOW && Q3State == HIGH && Q4State == LOW){result = '4' ;}
  if (Q1State == HIGH && Q2State == LOW && Q3State == HIGH && Q4State == LOW){result = '5' ;}
  if (Q1State == LOW && Q2State == HIGH && Q3State == HIGH && Q4State == LOW){result = '6' ;}
  if (Q1State == HIGH && Q2State == HIGH && Q3State == HIGH && Q4State == LOW){result = '7' ;}
  if (Q1State == LOW && Q2State == LOW && Q3State == LOW && Q4State == HIGH){result = '8' ;}
  if (Q1State == HIGH && Q2State == LOW && Q3State == LOW && Q4State == HIGH){result = '9' ;}
  if (Q1State == LOW && Q2State == HIGH && Q3State == LOW && Q4State == HIGH){result = '0' ;}
 
  return result;
}

Funziona bene, ma vorrei che il reset della password avvenisse entro tot secondi indipendentemente dal fatto che si stia digitando la password corretta o meno. In altre parole, vorrei che ci fosse un tempo determinato per digitare la password prima che avvenga il reset automatico.

Potete darmi una dritta? Grazie per l'attenzione.

Prova a guardare la funzione millis() ed ha studiarti come applicarla per fare cose a tempi determinati ... prima QUI, poi QUI ed infine leggi anche QUI e QUI ... vedrai che trovi la soluzione :wink:

Guglielmo

gpb01:
Prova a guardare la funzione millis() ed ha studiarti come applicarla per fare cose a tempi determinati ... prima QUI, poi QUI ed infine leggi anche QUI e QUI ... vedrai che trovi la soluzione :wink:

Guglielmo

Sì, grazie Guglielmo, ho visto la funzione e me la studierò.

Comunque ho risolto il problema (evitare che, per vari motivi, restino inserite delle cifre e impediscano un agevole inserimento della password da remoto) semplicemente aggiungendo il cancelletto e attribuendogli la funzione di reset: basta digitarlo prima della password. :smiley: