rele che si eccita dopo 3 pressioni in un determinato tempo

Salve ragazzi, mi sto scervellando per realizzare un programma che funzioni in questo modo:

a tre pressioni del pulsante (effettuate entro un determinato tempo ad esempio 2 secondi altrimenti tutto si resetta) si deve eccitare un rele per un secondo, poi si deve diseccitare e tutto si deve resettare. Se la pressione invece avviene solo una o due due volte entro questi 2 secondi, il sistema si deve resettare e ripartire da capo in attesa delle 3 pressioni.

Comincia a studiarti il funzionamento dell'esempio che trovi nell'IDE a File -> Esempi -> 02.Digital -> BlinkWithoutDelay

Ciao,
P.

Un metodo semplicissimo potrebbe essere l'utilizzo di millis() e while() come nell'esempio sotto:

  unsigned long tempolimite = 3000; //millisecondi
  unsigned long tempo = 0;
  unsigned long tempofine = 0;
  int pressioni = 0;

  if (digitalRead(pinPulsante) == HIGH) {
    
    tempofine = millis() + tempolimite;

    pressioni = 1;
    
    while ((millis() < tempofine) && (pressioni < 3)) {
      
      if (digitalRead(pinPulsante) == HIGH) {
        
        pressioni++;
        
        while(digitalRead(pinPulsante) == HIGH) {}
        
      }
      
    }
    
  }

  if (pressioni == 3) {
    digitalWrite(pinRele, HIGH);
    delay(1000);
    digitalWrite(pinRele, LOW);
  }
}