Impiego del pulsante per incrementare una variabile
Se volessimo impiegare il pulsante per incrementare il valore di una variabile val
, sicuramente è da scartare la possibilità di escludere l’antirimbalzo, in quanto una pressione ne incrementerebbe spropositatamente il valore. Impiegando la funzione debounce(pin)
si ha invece maggiore controllo, tuttavia una pressione del pulsante prolungata ne determina il frequente incremento a intervalli pari a debounceDelay
.
Nel seguente listato la variabile val
viene incrementata ad ogni lettura 0V sull’ingresso del pulsante e ne viene stampato il valore sul monitor seriale, ogni volta che viene modificato.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
//Incrementa il valore di una variabile in seguito alla pressione del pulsante, stampandola a monitor seriale. //La pressione prolungata ne determina l'incremento continuo a intervalli pari a debounceDelay. #define button_pin 2 int val = 0; int previous_val; int debounceDelay = 20; boolean debounce(int pin) { boolean state; boolean previousState; previousState = digitalRead(pin); for(int counter=0; counter < debounceDelay; counter++) { delay(1); state = digitalRead(pin); if( state != previousState) { counter = 0; previousState = state; } } return state; } void setup() { Serial.begin(9600); //inizializza comunicazione seriale a 9600bps pinMode(button_pin, INPUT_PULLUP); } void loop() { if(debounce(button_pin)==LOW) val++; //incrementa di 1 se il pulsante è premuto if(val != previous_val) { //se val è cambiato, stampa a monitor seriale Serial.println(val); previous_val = val; } } |
Nel video seguente si può notare come l’incremento della variabile dipenda dalla durata della pressione del pulsante.
Se invece volessimo incrementare di 1 la variabile ogni volta che premiamo il pulsante, prescindendo dalla durata della pressione? Ciò è trattato nel paragrafo seguente.
48,328 total views, 12 views today