Anche così dovrebbe funzionare. Fammi sapere ![]()
unsigned long t1=0;
byte pPrec=1;
byte n=0;
void setup()
{
pinMode(13,OUTPUT); // Inizializzazione I/O 13 in uscita:
pinMode(2,INPUT_PULLUP); // Inizializzazione I/O 2 in entrata:
}
// N.B.: per quanto già detto, il pulsante deve essere collegato verso massa, perciò
// adotto la logica negata (pulsante premuto=0).
void loop()
{ // Se il pulsante viene premuto (e non lo era), incrementa n; segna che è stato premuto (pPrec=0);
// se è la prima volta (n era 0 ed è stato incrementato a 1), prende il tempo:
if(digitalRead(2)==LOW)
{if(pPrec==1) {n+=1; pPrec=0; if(n==1) t1=millis();}}
else pPrec=1; // Se il pulsante viene lasciato, se lo segna (pPrec=1)
if(n==3) // ACCESO!
{
digitalWrite(13,HIGH);
delay(2000);
digitalWrite(13,LOW);
}
if(n==3 || (n>0 && millis()-t1>2000)) // Se il pulsante è stato premuto 3 volte,
{ // oppure è stato premuto 1 o 2 volte ma è scaduto il tempo, azzera n.
n=0;
while(digitalRead(2)==LOW); // Se il pulsante non è stato lasciato, non va avanti.
}
}