Arduino IDE: le istruzioni di tipo Digital I/O #11

Arduino IDE

La prima parte della guida riguardante i vari concetti della programmazione è conclusa, in questa seconda parte saranno riportate le funzionalità delle varie istruzioni utilizzate in Arduino IDE. Il primo articolo di questa seconda parte riguarderà le istruzioni Digital I/O, in particolar modo le funzioni digitalRead() , digitalWrite() e pinMode().

Prima di procedere con la spiegazione delle varie funzioni, è necessario esporre quali sono i parametri più utilizzati.

Le costanti INPUT, OUTPUT, HIGH e LOW

Le costanti INPUT e OUTPUT definiscono il comportamento da associare ai pin. Un pin digitale può essere configurato sia come INPUT che come OUTPUT.

Nel momento in cui si configura il pin come INPUT (poi si vedrà come), il pin entra in uno stato di alta impedenza (una porta in alta impedenza, come dice il nome, offre una elevata resistenza al passaggio della corrente ). In tale condizione il pin si presta meglio a leggere un sensore o un valore di tensione.

Nel momento in cui si configura il pin come OUTPUT (poi si vedrà come), il pin entra in uno stato di bassa impedenza (una porta in bassa impedenza, come dice il nome, offre una bassa resistenza al passaggio della corrente ). In tale condizione il pin può fornire una certa quantità di corrente e per tal motivo si presta meglio quando si utilizzano LED (per esempio).

Inoltre vi è data la possibilità di impostare il pin come INPUT_PULLUP. In tal caso saranno utilizzate le resistenze interne integrate nella board di Arduino e la tensione sarà impostata automaticamente su HIGH.

In genere, quando sul pin di input non viene specificato un valore  di tipo HIGH o LOW, il pin resterà in uno stato elettrico indeterminato (detto floating) variabile senza soluzione di continuità tra zero e la massima tensione accettata. Questo comportamento indeterminato è incompatibile con la gestione di ingressi digitali, che richiedono invece un valore ben definito. Per tale ragione gli input digitali vengono sempre inizializzati, nella sezione iniziale del programma, con i valori di HIGH o LOW.

Il significato della costante HIGH varia a seconda se il pin sia impostato come INPUT o OUTPUT. Quando il pin è configurato come INPUT la tensione sarà HIGH nel momento in cui è presente sul pin una tensione maggiore di 3.0 V (collegato al 5 V).

Nel momento in cui il pin è configurato come OUTPUT vi sarà una erogazione della corrente pari a 5 V (o 3.3 V) sul pin in questione. In tale condizione vi è il passaggio di corrente e permette, per esempio, di accendere un LED collegato tramite un resistore.

Anche il significato della costante LOW varia a seconda se il pin sia impostato come INPUT o OUTPUT. Quando il pin è configurato come INPUT la tensione sarà LOW nel momento in cui è presente sul pin una tensione minore di 2 V.

Nel momento in cui il pin è configurato come OUTPUT vi sarà una erogazione della corrente pari a 0 V sul pin in questione. In tale condizione non vi è il passaggio di corrente e in tal caso, per esempio, vi è data la possibilità di inviare un segnale per azzerare l’alimentazione e spegnere un LED.

La funzione digitalRead()

La funzione digitalRead() legge il valore di tensione del pin digitale specificato. La sintassi è la seguente:

digitalRead(pin)

I valori di ritonro di questa funzione sono i valori HIGH (se presente tensione) oppure LOW (se la tensione è assente).

Solitamente il valore di ritorno viene assegnato a una variabile di tipo intero. Per esempio:

In tal caso il pin deve essere impostato come INPUT.

La funzione digitalWrite()

La funzione digitalWrite() imposta la stato del specifico pin su HIGH o LOW. La sintassi è la seguente:

digitalWrite(pin, value)

Il parametro pin corrisponde al numero del pin a cui è collegato il determinato dispositivo con la board di Arduino. Il parametro value può assumere i valori HIGH e LOW.

Vi sono diversi casi da esaminare. Se il pin è stato configurato come OUTPUT, nel momento in cui si utilizza la funzione digitalWrite() il valore della tensione per HIGH corrisponderà a 5 V (o 3.3 V), mentre per LOW sarà di 0 V.

Se il pin è stato configurato come INPUT (in genere con funzionalità pullup), nel momento in cui si utilizza la funzione digitalWrite() e il valore della tensione è HIGH si abiliterà un resistore interno pullup da 20k, sufficiente per illuminare debolmente un LED. Se il valore della tensione è impostato su LOW, il resistore interno pullup è disabilitato e non vi sarà il passaggio di corrente. Tratteremo il meccanismo di pullup in un articolo a parte, dal momento che la sua logica appare di difficile comprensione in prima battuta.

La funzione pinMode()

La funzione pinMode() configura il pin come INPUT o OUTPUT. La sintassi è la seguente:

pinMode(pin, mode)

Il parametro pin corrisponde al numero del pin a cui è collegato il determinato dispositivo con la board di Arduino. Il parametro mode può assumere i valori INPUT, INPUT-PULLUP e OUTPUT.

Arduino

Link guida:

Link utili

Seguici per non perdere le prossime novità!

Simone Candido è un ragazzo appassionato del mondo tech nella sua totalità. Simone ama immedesimarsi in nuove esperienze, la sua filosofia si basa sulla irrefrenabile voglia di ampliare a 360° le sue conoscenze abbracciando tutti i campi del sapere, in quanto ritiene che il sapere umano sia il connubio perfetto tra cultura umanistica e scientifica.