Go Down

Topic: rele che si eccita dopo 3 pressioni in un determinato tempo (Read 195 times) previous topic - next topic

mistervolt70

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.

pgiagno

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

Ciao,
P.

TimoFran

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

Code: [Select]
  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);
  }
}

Go Up