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