Home

i/o analogiche

Indice
analogRead(pin)

Legge un valore di tensione applicato al piedino analogico 'pin' con una risoluzione di 10 bit. La funzione restituisce un valore compreso tra 0 e 1023.

value = analogRead(pin);
// imposta 'value' uguale al
// valore letto su 'pin'
// dalla funzione analogRead

Nota: i pin analogici a differenza di quelli digitali non hanno bisogno di essere dichiarati come pin di INPUT o OUTPUT.


analogWrite(pin, value)

Cambia il duty cycle (nella funizione: 'value') della modulazione di ampiezza di impulso (PWM: Pulse Width Modulation) su uno dei 'pin' contrassegnati dall'etichetta PWM.
Sull'attuale Arduino UNO su cui è montato un ATmega 328, il PWM è abilitato sui piedini 3,5,6,9,10 e 11.
Il valore del duty cycle può essere specificato da una variabile o una costante con un valore compreso tra 0 e 255.

analogWrite(pin, value);
// scrive il valore 'value'
// sul 'pin' analogico

Un valore di 0 genera in uscita una tensione continua di 0 volt sul pin specificato nella funzione; un valore di 255 genera una tensione continua 5 volt sul pin specificato nella funzione. Per valori compresi tra 0 e 255, il valore in uscita varierà rapidamente tra 0 e 5 volt. Più alto sarà il valore di 'value' più spesso su 'pin' si avrà una tensione di 5 volt. Ad esempio un valore di 'value' pari a 64 genera un segnale in cui per tre quarti del periodo dell'onda il segnale sarà a 0 volt e per un quarto del periodo dell'onda sarà a 5 volt. Se 'value' è posto a 128 avremo un segnale che per metà del periodo sarà a 0 volte e per la restante metà del periodo sarà a 5 volt. Se 'value' è posto a 192 avremo 0 volt per un quarto del periodo e 5 volt per i restanti tre quarti del periodo.

Per approfondire l'argomento sul PWM leggete la lezione su maffucci.it: Arduino – lezione 06: modulazione di larghezza di impulso (PWM) corredata da esempi pratici e filmati.

Poiché analogWrite è una funzione hardware, sul pin avremo un onda quadra dopo una chiamata della funzione analogWrite e questa verrà continuativamente emessa in background fino alla successiva chiamata della analogWrite (o chiamata della digitalRead o digitalWrite sullo stesso pin).

L'esempio che segue legge un valore analogico da un pin di ingresso analogico, converte il valore dividendolo per 4, e fornisce un segnale PWM sul pin PWM specificato:

int led = 10;
// al pin 10 è collegato un LED
// in cui in serie è posta un
// resistore da 220 Ohm

int pin = 0;
// inseriamo un potenziometro sul pin 0

int value;
// valore che sarà letto

void setup(){} 
// non è necessaria nessuna
// configurazione

void loop()
{
   value = analogRead(pin);
   // imposta 'value' al
   // valore letto su 'pin'
   
   value /= 4;
   // dividendo per 4 si converte
   // il valore letto compreso tra
   // 0 e 1023 in un valore
   // compreso tra 0 e 255
   
   analogWrite(led, value);
   // il valore del PWM
   // viene assegnato al led
   
}