Appunti di programmazione su Arduino: ingressi e uscite digitali

Continuano le lezioni sulla programmazione su Arduino, se avete necessità di consultare le lezioni precedenti guardate la sezione Appunti di programmazione che trovate nella sezione Arduino di questo sito.

pinMode(pin, mode)

Utilizzato all’interno del void setup(), consente di configurare un determinato pin e stabilisce se deve essere un pin di INPUT o di OUTPUT.

pinMode(pin, OUTPUT);        // imposta 'pin' come output

I pin digitali di Arduino sono per default impostati come pin di INGRESSO, perciò non è necessario dichiararli esplicitamente come input con la pinMode(). Nel caso si debba utilizzarli come pin di uscite è indispensabile impostare il pin come OUTPUT con il comando pinMode(pin, OUTPUT). I pin configurati come input si dice che sono in uno stato di alta impedenza.

Il processore Atmega presente sulla scheda Arduino è dotata, sui ogni piedino di ingresso digitale, di una resistenza di pull-up da 20KOhm che abilitata via software consente di impostare il pin come input. Le istruzioni sono le seguenti:

pinMode(pin, INPUT);       // imposta 'pin' come input
digitalWrite(pin, HIGH);   // attiva la resistenza di pull-up,
                           //'pin' viene impostato HIGH

Le resistenze di pull-up vengono normalmente utilizzate per connettere gli input come interruttori.

Si noti che nell’esempio sopra non viene configurato un pin come output, è un modo per attivare il pull-up interno.

I pin configurati come OUTPUT sono detti a bassa impedenza e sono in grado di fornire 40 mA (milliampere) ad altri dospositivi o circuiti. Questa è una corrente sufficiente per accendere un LED (non dimenticate di inserire in serie una resistenza), ma non è una corrente sufficiente per pilotare la maggior parte dei relè, bobine o motori.

I cortocircuiti sui piedini di Arduino possono danneggiare o distruggere i pin di output o danneggiare l’intero chip Atmega. Quando si ha la necessità di utilizzare i pin come output per collegare dispositivi esterni è buona prassi inserire in serie al pin un resistore da 470 Ohm o 1 KOhm.

digitalRead(pin)

Legge lo stato di uno specifico pin digitale ed il valore restituito può essere HIGH o LOW. Il ‘pin’ può essere specificato come una variabile o una costante (0-13).

value = digitalRead(Pin);   // imposta 'value' al valore
                            // letto sul pin

digitalWrite(pin, value)

Pone a livello HIGH o LOW l’uscita digitale ‘pin’. Il ‘pin’ può essere specificato come una variabile o una costante (0-13).

L’esempio che segue legge un pulsante collegato ad un ingresso digitale e visualizza su un LED, connesso ad una uscita digitale, quando il pulsante viene premuto:

int led = 13;  // il LED è connesso all'uscita digitale 13
int pin = 7;   // il pulsante è collegato al pin digitale 7
int value = 0; // variabile per memorizzare il valore letto

void setup()
{
  pinMode(led, OUTPUT); // imposta il pin 13 come OUTPUT
  pinMode(pin, INPUT);  // imposta il pin 7 come INPUT
}

void loop()
{
  value = digitaRead(pin);   // imposta 'value' uguale
                             // al valore letto su 'pin'
  digitalWrite(led, value);  // imposta 'led' al valore
                             // della variabile 'value'
}

Per le lezioni precedenti consultare la sezione Appunti di programmazione che trovate nella pagina Arduino di questo sito.

Questa voce è stata pubblicata in arduino e contrassegnata con , , , , . Contrassegna il permalink.

3 risposte a Appunti di programmazione su Arduino: ingressi e uscite digitali

  1. andpagl scrive:

    “I pin digitali di Arduino sono per default impostati come pin di input se non sono esplicitamente dichiarati come INGRESSI…”

    Si intendeva “USCITE”, oppure non ho capito nulla?

    (Grazie del Suo lavoro, e buon Natale! [anche se magari leggerà questo commento dopo Pasqua…])

    Andrea

    • admin scrive:

      Ciao Andrea
      ho letto il tuo commento appena mi è giunto, come i tantissimi che mi arrivano ogni giorno, ma non sono in grado di rispondere tempestivamente a tutti, alcuni richiedono un’analisi approfondita e non sarebbe serio da parte mia rispondere in modo superficiale.

      Perdonami se ti ho confuso le idee, ora ho corretto il testo a cui fai riferimento, spero vada bene.
      Grazie per gli Auguri, ricambio anche se in ritardo e se trovi altre ambiguità o errori non esitare a segnalarmeli.

      Grazie.

  2. Marco scrive:

    Ciao. Io ho un problema. Sto cercando di acquisire lo stato di due pulsanti mediante la funzione digitalRead() durante l’esecuzione di un programma per la gestione di un cancello automatico. Il problema che si pone é che quando schiaccio il punlsante é come se non riuscissi mai ad essere in tempo per l’acquisizione dello stato del pulsante stesso. La domanda che mi pongo é: rispetto ad un semplice pulsante cosa dovrei fare affinchè il mio programma esegua un monitoraggio continuo dello suo stato? Usare solo DigitalRead mi sembra riduttivo dato che io potrei essere da qualche altra parte del codice mentre sto schiacciando il pulsante.

    Grazie per la risposta e complimenti per la buona strutturazione di questa pagina.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.