Quanto Tempo Hai Premuto il Pulsante?

Obiettivo: Determinare per quanto tempo un pulsante è stato premuto.

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • Pulsante
  • Resistenza (1kOhm)

Prerequisiti


Blinking Led Senza Delay: MILLIS()



Pulsante come Interruttore


TeoriaPoter misurare il tempo di pressione di un tasto può risultare utile in molte applicazioni. Infatti, questa informazione permette di discriminare le differenti modalità di iterazione con il pulsante come il click (tasto premuto) ed il long click (tasto premuto a lungo). Potere discriminare questi comportamenti permette di abilitare il pulsante a differenti funzioni. Ad esempio il single click potrebbe essere utilizzato per accendere un led mentre il long click potrebbe essere utile per farlo lampeggiare.
Dal punto di vista hardware il circuito necessario per realizzare questa applicazione è molto semplice ed è costituito dal singolo pulsante collegato a vcc e al ground mediante resistenza di pull-down.
Elemento centrale di questa esercitazione è la scrittura di un codice corretto che permetta di misurare esattamente lo scorrere quel tempo. Questo codice si basa sull’impiego di due elementi fondamentali:

  • La funzione millis: questa funzione restituisce il numero di millisecondi che sono passati da quando la board Arduino ha eseguito il programma corrente. Questo numero si riazzera dopo circa 50 giorni. L’impiego di questa funzione è fondamentale per misurare il tempo di pressione del pulsante. Nel dettaglio, questa operazione può essere svolta semplicemente eseguendo la differenza tra le misure temporali prese quando il pulsante è premuto e quando il pulsante è rilasciato.
  • La variabile di stato: questa variabile (di natura globale) permette di determinare quando un pulsante è premuto e quando il pulsante è rilasciato. Nello specifico grazie a questa variabile è possibile determinare un passaggio dallo stato logico basso a quello alto e viceversa.

Collegamento Circuitale:

Collegamento Circuitale

Codice: A seguire viene riportato il codice utilizzato per determinare il tempo di pressione di un pulsante. Nello specifico il codice utilizza la variabile di stato “valButtonOld” per memorizzare lo stato del pulsante relativo al ciclo passato.
Quando i valori di “valButton” evalButtonOld” differiscono, allora c’è stato un passaggio di stato.

ValButtonOld ValButton Evento
LOW HIGH Il pulsante è stato premuto
HIGH LOW Il pulsante è stato rilasciato

Nel caso specifico del passaggio di stato viene effettuata una misura del tempo trascorso mediante la funzione millis(). Per determinare il tempo trascorso basta semplicemente effettuare una differenza tra le due misure realizzate.



PersonalizzazioniE’ possibile modificare l’hardware introducendo due led. Quando il pulsante viene premuto per meno di un secondo deve accendersi il primo led, quando invece il pulsante viene premuto per più di un secondo deve accendersi il secondo.