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.