This page is also available in 3 other languages

analogWrite()

[I/O Analogico]

Descrizione

Scrive un valore analogico (onda PWM) ad un pin. Può essere usato per illuminare un LED a luminosità variabile o pilotare un motore a diverse velocità. Dopo una chiamata a analogWrite(), il pin genererà un’onda quadra costante con il duty cycle specificato fino alla prossima chiamata a analogWrite() ( oppure digitalRead() o digitalWrite() ) sullo stesso pin. La frequenza del segnale PWM su molti pin è approssimativamente 490 Hz. Sulla Uno e schede simili, i pin 5 e 6 hanno una frequenza di circa 980 Hz.

Sulla maggior parte delle schede Arduino ( quelle con ATmega168 o ATmega328P ), funziona sui pin 3, 5, 6, 9, 10, e 11.
Sull’Arduino Mega, funziona sui pin dal 2 al 13 e dal 44 al 46.
Le schede Arduino più vecchie con un ATmega8 supportano analogWrite() solo sui pin 9, 10, e 11.
Arduino DUE supporta analogWrite() sui pin da 2 a 13, oltre che sui pin DAC0 e DAC1.
Diversamente dai pin PWM, DAC0 e DAC1 sono convertitori digitale-analogico, e si comportano come veri output analogici.
Non hai bisogno di chiamare pinMode() per impostare il pin come output prima di chiamare analogWrite().
La funzione analogWrite non ha nulla a che vedere con i pin analogici o la funzione analogRead.

Sintassi

analogWrite(pin, valore)

Parametri

pin: Il pin sul quale scrivere. Tipi di dato permessi: int.
valore: il duty cycle: tra 0 ( sempre spento ) e 255 ( sempre acceso ). Tipi di dato permessi: int

Restituisce

Nulla

Codice di Esempio

Imposta l’output del LED in modo proporzionale al valore letto dal potenziometro.

int ledPin = 9;      // il LED connesso al pin 9
int analogPin = 3;   // potenziometro connesso al pin A3
int val = 0;         // variabile per conservare il valore letto

void setup()
{
  pinMode(ledPin, OUTPUT);   // imposta il pin come output
}

void loop()
{
  val = analogRead(analogPin);   // leggi il pin di input
  analogWrite(ledPin, val / 4);  // i valori di analogRead vanno da 0 a 1023, i valori di analogWrite da 0 a 255
}

Note e Avvertimenti

Gli output PWM generati sui pin 5 e 6 avranno un duty cyle più alto di quello atteso. Questo a causa dell’interazione con le funzioni millis() e delay(), che condividono lo stesso timer interno usato per generare questi output PWM. Questo si noterà in particolare con impostazioni basse del duty-cycle (es. 0 - 10) e potrebbe risultare in un valore di 0 che non spegne completamente l’output sui pin 5 e 6.

Vedi anche

  • DEFINIZIONE PWM