389 1671634     [javascript protected email address]

Blog / Arduino

Hardweb sviluppa progetti in linguaggio C sfruttando le potenzialità di Arduino, ed esegue corsi di formazione per studenti e professionisti che desiderano imparare a programmare queste schedine dalle mille applicazioni.

Come usare e collegare un pulsante con Arduino

Condividi questo post:

Uno dei componenti più semplici in un circuito elettronico è il pulsante, su Arduino lo possiamo utilizzare praticamente per qualsiasi cosa ci passi per la testa, ma lo scopo finale è quello di far eseguire una porzione di codice a nostra scelta quando il pulsante viene premuto.

In questo articolo vediamo come utilizzarlo nella maniera più semplice e completa possibile.

Pulsante al positivo o al negativo

Un pulsante ha due fili: Uno dei due viene collegato alla tensione e l’altro viene collegato ad uno dei pin di arduino, pin che dovrà essere configurato come ingresso. Quando il pulsante viene premuto la tensione positiva (o negativa) viene portata verso il pin di ingresso.

I pin di Arduino, configurati come ingresso, non hanno di default uno stato specifico, si trovano infatti sempre in uno stato di “isteresi” dove il segnale non è né HIGH né LOW, ed è possibile quindi che arduino faccia confusione. Pertanto dobbiamo forzare il pin di ingresso ad essere di default HIGH oppure LOW, in modo che il pulsante possa invertire lo stato quando è premuto, scatenando una condizione scelta da noi.

Abbiamo quindi due possibilità, collegare il filo di partenza al positivo o al negativo. Qual’è la differenza?

A livello teorico nessuna, a livello pratico serve in entrambi i casi una resistenza collegata al pin di ingresso, da (1Kohm a 10Kohm) va benissimo.
Collegando la resistenza tra il pin e GND, avremo il pin sempre a livello LOW, mentre collegando la resistenza al positivo (5V) avremo sempre il pin a livello HIGH.

Arduino permette (solo nel secondo caso) di attivare una resistenza interna al microprocessore ATMEL, che mantiene il pin a livello HIGH, così potremmo utilizzare sempre pulsanti collegati al negativo senza dover mai usare resistenze esterne.

Collegheremo quindi il pulsante a GND, negativo, e risulterà premuto quando il pin di input passerà dal valore di default HIGH al livello LOW.


Per forzare quindi il pin di ingresso ad essere HIGH di default sfrutteremo il metodo “INPUT_PULLUP” che oltre a settare il pin come ingresso, attiva anche la resistenza interna, che mantiene il pin a livello HIGH. (La traduzione di PULL-UP infatti è “spingi verso l’alto”, la traduzione di HIGH è appunto “ALTO”).

Il codice qui sopra funziona, ma è incompleto. La velocità di esecuzione del loop infatti è altissima pertanto premendo il pulsante un solo colpetto quella porzione di codice verrà eseguita svariate volte. Non diciamo al programma infatti di attendere che il pulsante venga rilasciato, o di eseguire il codice dopo qualche momento dalla pressione del pulsante.

Per renderci conto della velocità con cui il loop viene eseguito possiamo usare il seguente codice (ricordatevi di aprire il monitor seriale dopo aver caricato lo sketch su arduino).

Ora che ci siamo resi conto della velocità di esecuzione del codice di Arduino, possiamo ottimizzarlo in 3 modi per decidere come si dovrà comportare il programma quando premiamo il pulsante.

Metodo 1: pressione pulsante – attesa – esecuzione

Metodo 2: pressione pulsante – esecuzione – attesa

Come possiamo vedere i metodi 1 e 2 sono molto simili, il primo attende due secondi poi esegue il codice, il secondo esegue subito il codice e poi attende due secondi.
Funzionano per il semplice motivo che due secondi sono un tempo sufficiente per premere il pulsante e rilasciarlo, senza quindi scatenare due azioni ravvicinate.
E’ possibile capirlo, abbassando il valore 2000 con 200 o valori più bassi.

Metodo 3 (professionale): pressione pulsante – attesa infinita – esecuzione

Nel metodo 3 viene aggiunto un ciclo WHILE che non esegue nulla al suo interno fintanto che il pulsante rimane premuto, praticamente crea un’attesa infinita, e solo al suo rilascio prosegue con il codice successivo.

Quando il progetto diventa complesso e si desidera rendere più stabile il funzionamento del nostro circuito inoltre è bene imparare a filtrare gli ingressi e le uscite di arduino.

Spero che gli esempi vi siano utili, se avete dubbi o domande commentate qui sotto ed eventualmente suggeriteci metodi alternativi!

Discussione e Commenti

Post che potrebbero interessarti

Vuoi risolvere un problema? Chiamaci al 389 1671634
o mandaci una mail a [javascript protected email address]

Ti risponderò personalmente per qualsiasi necessità o emergenza, anche tramite un messaggio Whatsapp! Invia una mail