Lettura seriale: LED in PWM

Salve a tutti,
sto utilizzando la PWM per illuminare un piccolo LED; inoltre tramite una lettura sulla seriale visualizzo la tensione che viene fornita al LED.
Nel monitor seriale però leggo qualcosa di inaspettato: la tensione infatti non cresce da 0 a 400 (il valore massimo, uso una resistenza da 330 Ohm), ma ci sono dei salti tra 0 e 400 senza nulla nel mezzo.
Vi posto il codice per fare più chiarezza:

int ledVal;
float sinVal;

void setup() {
  pinMode(10, OUTPUT);
  Serial.begin(9600);
  delay(50);
}

void loop() {
  for(int x=0; x<180; x++) { //prendo solo i valori positivi del seno (angolo compreso tra 0 e 180)
  sinVal = sin(x*(3.1412/180)); //l'argomento del seno deve essere un angolo in radianti
  ledVal = int(sinVal*255); //il seno nel range stabilito varia tra 0 e 1. Moltiplicando per 255 aumento la luminosità ad ogni iterazione del for
  analogWrite(10, ledVal);
  Serial.println(analogRead(0));
  delay(50);
  }
}

Nel momento massimo di illuminazione, il terminale mi mostra una colonna di 400. Quando invece il Led è prossimo a spegnersi noto tanti 0.
Quando passa da luminosità minima a massima, c’e una fase di transizione:

0
0
0
0
401
0
0
400
0
0
400
0
401

La mia domanda è: la tensione non dovrebbe crescere da 0 a 400 tramite la funzione sin?
Chiaramente la misurazione è effettuata tramite l’A0 collegata all’anodo del LED.

EDIT: Cercando meglio, ho capito che è proprio ciò che deve fare la PWM. Variare il tempo in cui il LED è ON/OFF (quindi variare il duty cicle). Nel mio caso ciò è modellato con la funzione seno.
Scusate se ho aperto questa discussione, devo rimuoverla oppure posso lasciarla? Grazie.

Complimenti, hai scoperto come funziona il PWM!! :grin:

Se fai delle letture analogiche troverai sempre o 0 o il valore massimo. Quello che cambia è la tempistica, ovvero il duty-cicle. Quanto rimane lo zero e quanto il valore massimo.
Per approfondire --> Arduino – lezione 06: modulazione di larghezza di impulso (PWM) | Michele Maffucci
oppure --> http://www.settorezero.com/wordpress/come-arduino-gestisce-il-pwm-esempio-pilotaggio-cent4ur-con-arduino/
e --> http://www.arduino.cc/en/Tutorial/PWM

Ho modificato il post :slight_smile:
Cercando sono arrivato alla stessa conclusione che mi hai proposto. In ogni caso ti ringrazio molto!
Approfondirò senz’altro tramite i link che mi hai fornito.
Mi dispiace di aver aperto il topic, ma proprio non riuscivo a capire e le prime ricerche sulla rete non avevano sciolto i dubbi.

In ogni caso è un piacere scoprire queste cose “sulla propria pelle” :slight_smile:
Grazie ancora,
un saluto!

Se vuoi un segnale analogico più... analogico:

  1. usa un DAC esterno
  2. metti un filtro RC all'uscita del pin PWM
  3. usa il segnale PWM come ingresso di un op-amp

Leo, il 3 non capisco; mi conosci, sono mezzo Tommaso.
Ciao Uwe