Home

i/o digitali

Indice
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 funzione 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'
}