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