Arduino: Ingressi e uscite analogiche

analogRead (pin)

Legge il valore di tensione applicato ad un pin di input analogico con una risoluzione pari a 10 bit. Questa funzione restituisce un numero intero compreso tra 0 e 1023.

value = analogRead (pin); // imposta value uguale a ‘pin’

Nota: il pin analogico a differenza di quelli digitali, non hanno bisogno di essere prima dichiarati come INPUT o OUTPUT.

analogWrite (pin, value)

Cambia la percentuale della modulazione di larghezza di impulso (Pulse Width Modulation – PWM) su uno dei pin contrassegnati dalla sigla PWM. Sulle nuove schede Arduino con il chip ATmega168, questa funzione è abilitata sui pin 3, 5, 6, 9, 10 e 11. Le schede Arduino più vecchie con un ATmega8 supportano solo i pin 9, 10 e 11. Il valore può essere specificato da una variabile o una costante con un valore compreso tra 0 e 255.

analogWrite (pin, value); // abilita il pin di uscita al valore analogico della variabile value

Un valore 0 genera una uscita pari a 0 volt al pin specificato; un valore di 255 genera un segnale di 5 volt al pin specificato.

Per valori tra 0 e 255, il valore di uscita sarà compreso tra 0 e 5 volt. Più alto è il valore, più spesso il pin è attivo alto (5 volt). Ad esempio, un valore 64 sarà 0 volt tre quarti del tempo, e 5 volt un quarto del tempo; mentre un valore di 128 sarà a 0 volt la metà del tempo e 5 volt la restante metà del tempo; un valore di 192 fornirà un valore di 0 volt un quarto del tempo e 5 volt tre quarti del tempo.

Poiché questa è una funzione hardware, il pin genererà un’onda quadra a impulsi costante dopo una chiamata all’istruzione analogWrite in background fino alla successiva chiamata analogWrite (o una chiamata a digitalRead o digitalWrite sul pin stesso).

L’esempio seguente legge un valore analogico da un pin di ingresso analogico, converte il valore dividendolo per 4, e fornisce un segnale PWM su un pin PWM:

int led = 10; // è collegato un LED con resistenza da 220 al pin 10
int pin = 0; // un potenziometro o un pin analogico viene assegnato il valore 0
int value; // la variabile value sarà utilizzata per la lettura

void setup () {} // non è necessaria alcuna configurazione void loop ()
{
value = analogRead (pin); // assegna a value il valore letto sul ‘pin’
valore / = 4 // converte il rapporto 0-1023 nel rapporto 0-255
analogWrite (led, value); // il valore PWM viene assegnato al led
}