Arduino digitalRead, input digitale e pulsanti

digitalRead è la funzione Arduino per conoscere lo stato di un ingresso digitale

Con il nostro primo progetto siamo riusciti ad accendere o spegnere dei led a nostro ad un ritmo da noi deciso, ci siamo occupati quindi di attivare o disattivare un dispositivo esterno tramite un segnale di OUTPUT.

Se invece vogliamo ricevere informazioni dai dispositivi che connettiamo ad Arduino dobbiamo parlare di ingressi e quindi di INPUT.

Abbiamo già visto che Arduino dispone di 14 pin di I/O digitale: ognuno di questi può essere configurato a nostro piacimento come ingresso (INPUT) o uscita (OUTPUT) digitale nella fase di setup del nostro programma.

Nel nostro prossimo programma ci occuperemo quindi di leggere lo stato di un pulsante (premuto o rilasciato) e utilizzeremo questa informazione per far accendere un led, normalmente spento, quando noi schiacciamo il pulsante.

L’istruzione che utilizzeremo a questo scopo è digitalRead che ci permette di conoscere lo stato di uno degli ingressi digitali di Arduino.

Per il nostro circuito avremo bisogno oltre alla scheda Arduino di:

  • 1 Led
  • 1 Resistore per configurare il led
  • 1 pulsante
  • 1 Resistore di pulldown (10 KOhm)

Il codice che utilizzeremo è questo:

int led = 12;
int pulsante = 11;
int stato_pulsante;

void setup() { 
 pinMode(led, OUTPUT); 
 pinMode(pulsante, INPUT);
}

void loop() {
 stato_pulsante = digitalRead(pulsante); 
 if (stato_pulsante == HIGH){
   digitalWrite(led, HIGH);
 } else { 
   digitalWrite(led, LOW);
 }
}

Il programma è molto semplice e per molti sarà intuibile il suo funzionamento al primo sguardo.

Per i più nuovi alla programmazione oltre alla nuova istruzione digitalRead troviamo un’altra nuova e importante istruzione: l’istruzione IF.

L’istruzione IF è fondamentale in quasi tutti i linguaggi di programmazione esistenti al mondo ed è l’istruzione che ci permette di eseguire determinate operazioni (istruzioni), invece di altre, se si sono verificate o meno determinate condizioni.

Una di queste condizioni che possiamo testare è appunto lo stato del nostro pulsante e lo faremo tramite la funzione digitalRead che ci permette di sapere se sul pin di arduino è presente una tensione o meno.

Il funzionamento del programma si puo’ riassumere così: “Se il pulsante è premuto allora accendi il led, altrimenti spegnilo“.

Nella funzione setup() ci siamo preoccupati oltre ad impostare un pin in output, come nel nostro primo progetto, anche di settarne un secondo in input per leggere lo stato del pulsante.

La funzione loop si riassume così:

  1. Leggi lo stato del pulsante
  2. Il pulsante è premuto?
    1. SI: Accendi il led
    2. NO: Spegni il led
  3. Torna al punto 1
Schema arduino con pulsante
Schema arduino con pulsante

Per quanto riguarda il collegamento del pulsante dobbiamo collegare un’estremità a +5V, la seconda invece va collegata sia alla resistenza di pull down che poi finisce a massa sia al nostro pin di input di Arduino.

Per la resistenza va bene una da 10KOhm.

Facile anche questo no?

Purtroppo nella realtà la lettura di un pulsante è un po’ più difficile perchè il segnale che viene inviato dal nostro pulsante non è molto preciso, ma di questo ci preoccuperemo nel prossimo articolo.

2 commenti su “Arduino digitalRead, input digitale e pulsanti”

  1. E’ possibile che nello schema di esempio tu abbia utilizzato delle porte diverse dal programma?
    Hai indicato nel programma le variabili
    int led = 12;
    int pulsante = 11;
    ma nello schema di esempio non le usi.
    corretto?
    grazie per la risposta

    Rispondi
    • Si è possibile, mai fare copia incolla da internet senza capire i concetti …
      Sembra siano utilizzate la porta 10 e 12 da un’occhiata veloce, prendete le immagini solo come esempio di riferimento.

      Rispondi

Lascia un commento