azzerare una variabile

Buongiorno a tutti,
innanzitutto mi presento, sono uno studente di liceo scientifico di Venezia e ho iniziato da poco, anzi diciamo che devo ancora iniziare, ad avvicinarmi al mondo arduino. Ma iniziamo con il problema vero e proprio: sto costruendo una casetta sull'albero e per rendere il tutto più hitech avrei intenzione di mettere una scala attivata grazie ad un germotor. il tutto però vorrei fosse attivato da una password di 3 o più cifre. oggi sono riuscito a creare un codice che, con 3 pulsanti ognuno dei quali aumenta rispettivamente una variabile di 100, 10, 1, arriva ad un codice prestabilito. il problema sta nel fatto che oltre riuscire a far azzerare il codice dopo che ha raggiunto la password prestabilita, vorrei che si riuscisse a farlo azzerare dopo tipo 10 secondi che i pulsanti non vengono schiacciati. ho provato svariate volte ma non riesco. di seguito posto anche lo sketch se qualcuno riuscisse a consigliarmi cosa modificare ne sarei molto grato.

const int led = 2;
const int b = 22;
const int b2=26;
const int b3=30;
int var;
int code=624;

void setup(){
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(b, INPUT);
pinMode(b2, INPUT);
pinMode(b3, INPUT);
var=0;
}
void loop(){
if (digitalRead(b)==HIGH){ //unità
var++;
delay(200);
}
else{
var=var;
}
if (digitalRead(b2)==HIGH){ // decine
var=10+var;
delay(200);
}
else{
var=var;
}
if (digitalRead(b3)==HIGH){ // centinaia
var=100+var;
delay(200);
}
else{
var=var;
}
Serial.println(var, DEC);
if (var==code) {
digitalWrite(led, HIGH);
delay(150);
digitalWrite(led, LOW);
delay(75);
digitalWrite(led, HIGH);
delay(2000);

var=0;
}
else{
digitalWrite(led,LOW);
}

}

perchè scrivi in giro var=var? ...toglierei proprio l'else...
comunque la funzione che fa per te è il millis... ritorna i millisecondi trascorsi da quando hai acceso il coso...

dovresti scrivere cosette di questo tipo... te le butto giù di istinto poi tu correggile e metti maiuscole e punti e virgola a profusione dove vanno messi :slight_smile:

quando dichiari le variabili globali tienti due var così:

long oldMillis;
long newMillis;

poi in setup() vai a scrivere un bel
oldMillis = millis();

poi nel loop() vai a fare

newMillis = millis()
if (newMillis - oldMillis > 10000) //10 secondi di timeout... casomai cala o cresci
{
 var =0; // cancello la variabile 
 oldMillis = millis() //ricomincio con il conto...


};

magari all'interno dell'if potresti fare anche una cosa del genere per generare qualche lampeggio veloce
int i;
for (i= 0; i <4; i++)
{ digitalWrite(led,HIGH);
delay(300);
digitalWrite(led,LOW);
delay(200);

};

Io farei diversamente.
Premesso che la password è numerica ed è lunga x caratteri, assegnerei ai 3 tasti la funzione "incremento di 1", "spostamento a dx", conferma.
In questo modo l'inserimento della combinazione diverrebbe tipo lo sgancio di quei lucchetti da bici a dischi combinatori numerici.
Esempio: la tua password è 4356
All'inizio il display visualizza 0000, la 1a cifra a sx lampeggia. Premendo "incremento di 1" per 4 volte, porti il display a 4000, poi premi "spostamento a dx" e imposti il 3. Ecc.. Se sull'ultima cifra premi per errore "spostamento a dx", semplicemente il cursore torna alla prima cifra a dx. Premendo "conferma" viene controllata la password immessa.

Prevedi anche una password supervisore, per poter cambiare la password di accesso a "runtime", senza bisogno di scollegare il tutto e di attaccarci un PC per l'operazione. Salvi le 2 password in EEPROM e le leggi all'avvio. In caso una delle 2 password venga cambiata, la sovrascrivi sulla EEPROM.

Per le funzioni temporali controlla l'esempio BlinkWithoutDelay che è allegato all'IDE, troverai un modo per poter eseguire una certa azione trascorso un tot periodo di tempo senza bloccare il codice, continuando quindi a gestire l'input dell'utente.