[RISOLTO]bool e 2 pulsanti

buonasera a tutti, sto cercando di creare una boolean, quindi vera o falsa calcolando il tempo
che ce’ tra la pressione del tasto 1 a quello del tasto 2 .
premo il tasto 1 diventa vera, se non premo il tasto 2 entro un tempo, diventa falsa
ma non ci riesco cosa sto sbagliando?

bool pulsante=false;

if (digitalRead(4) == LOW) { // primo pulsante che premo
  pulsante=true;             //  ora e' vera 
pulsante1=millis();        //memorizzo i millis
}
  if (digitalRead(5) == LOW) {// secondo pulsante che premo
  pulsante2=millis();                //memorizzo i millis
}
 if (pulsante1  - pulsante2) < 3000) { //se pulsante 2 e' inferiore a pulsante 1 di 3000
     pulsante=true;
   
    
  }
 else                                            //altrimenti diventa falso
   pulsante=false;
    
  }

Pulsante2 sarà sempre maggiore di Pulsante1!

Qusto if è errato

if (pulsante1  - pulsante2) < 3000)

e credo che compilando ricevi anche un bell’errore per una parentesi di troppo :slight_smile:

Vedo solo una parte del programma ma da queste righe io mi aspetterei questo.

Premi il primo pulsante e pulsante diventa true.
A questo punto avviene il controllo if prima che tu prema il secondo pulsante e quasi istantaneamente
pulsante diventa false.
Quando premi il secondo pulsante in un tempo inferiore a 3000 diventa true.

In pratica è true solo se premi anche il secondo pulsante.

io farei qualcosa del genere.

1)Se pulsante uno premuto prendo il tempo millis(), metto a true pulsante, e metto a true una terza variabile che mi abilita il contatore di tempo. abilitato=true;

2)Se premo il pulsante due metto false la variabile che abilita il contatore di tempo

abilitato=false;

  1. contatore di tempo abilitato da una variabile, se passati 3000 metto false il pulsante
if(millis()- pulsante1>=3000 && abilitato==true){// conta il tempo solo se non è premuto pulsante2

         pulsante=false;

}

grazie del tuo esempio, quindi una cosa a questo modo

boolean  pulsante;
boolean abilitato;
 unsigned long pulsante1 =0;

void setup() {
  pinMode(4, INPUT_PULLUP); 
pinMode(5, INPUT_PULLUP);
Serial.begin(1200);
Serial.print("pulsante");

}
void loop() {
Serial.print(pulsante);
if (digitalRead(4) == LOW) { // primo pulsante che premo
 pulsante=true;
abilitato=true;
pulsante1=millis();
}
  if (digitalRead(5) == LOW) {// secondo pulsante che premo

abilitato=false;
}
 if(millis()- pulsante1>=3000 && abilitato==true){// conta il tempo solo se non è premuto pulsante2

         pulsante=false;
 
}

In questo modo pulsante1 avrà come valore di millis() quando lasci il pulsante e non quando lo premi.
Se vuoi che conti dal momento in cui premi il pulsante1 puoi fare:

if (digitalRead(4) == LOW && !pulsante) { // primo pulsante che premo

il serial.print(pulsante) puoi spostarlo all'interno del primo if.
Se usi Serial.println(pulsante) sarà piu leggibile nel tuo serial.

Devi inizializzare le due variabili bool a false.