Go Down

Topic: [RISOLTO]bool e 2 pulsanti (Read 384 times) previous topic - next topic

daniele999

May 15, 2020, 12:02 am Last Edit: May 15, 2020, 10:45 pm by daniele999
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?
Code: [Select]
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;
    
  }

Datman

Pulsante2 sarà sempre maggiore di Pulsante1!
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

fabpolli

Qusto if è errato
Code: [Select]

if (pulsante1  - pulsante2) < 3000)

e credo che compilando ricevi anche un bell'errore per una parentesi di troppo :)

torn24

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;

3) contatore di tempo abilitato da una variabile, se passati 3000 metto false il pulsante
Code: [Select]


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

         pulsante=false;

}

daniele999

#4
May 15, 2020, 12:07 pm Last Edit: May 15, 2020, 12:12 pm by daniele999
grazie del tuo esempio, quindi una cosa a questo modo
Code: [Select]
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;
 
}

savoriano

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:
Code: [Select]
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.

Go Up