Fading sul LED e analogWrite.

L’istruzione analogWrite(p,dc) manda sul pin “p” un segnale PWM periodico che è alto per un tempo pari a dc/255  del periodo.

Esercizio: creare un circuito inserendo un LED ed un resistore sul pin 9 (il pin 13 non è PWM) e nel loop inserite l’istruzione analogWrite(9,128). Risultato avrete che il LED ha intensità dimezzata rispetto al normale. Il motivo dell’intensità luminosa ridotta è che il LED riceve una tensione corretta, ma per un tempo ridotto alla metà, l’altra metà del tempo è invece spento. Poiché analogWrite invia il segnale con frequenza elevata ( la frequenza del segnale PWM su molti pin è approssimativamente 490 Hz), l’occhio umano non è in grado di distinguere il momento che il LED viene spento e quello che viene acceso ma percepisce, invece, un’intensità luminosa dimezzata.

Esercizio: provate una luminosità ridotta al 25% e poi al 75%.

Istruzione FOR.

L’istruzione FOR serve per ripetere un gruppo di istruzioni: se voglio ripetere le istruzioni tipiche del blink (accendi il LED, aspetta, spegni il LED, aspetta) un certo numero di volte posso utilizzare un ciclo FOR.

for (int j=1; j<=10; j++){

   istruzioni;

}

Serve ad eseguire 10 volte le istruzioni tra parentesi graffe: la variabile intera “j” è detta contatore, e nel ciclo FOR viene sempre indicato il valore iniziale (J=1), il valore a cui deve arrivare (J<=10) e di quanto deve crescere (j++  che significa incrementi di 1). Il ciclo FOR quindi utilizza una variabile “j” con la quale si contano le ripetizioni (cicli). J deve restare <=10 e fino a che questo è vero, j viene sempre incrementata di uno. Se al posto di “istruzioni” metto le 4 istruzioni del “blink” otterrò 10 lampeggi con una certa durata (dipende dal delay).

L’esercizio in figura consiste invece nel produrre un effetto luminosità crescente e poi decrescente: utilizzare due cicli FOR, il primo per incrementare il valore del duty cicle ed un secondo ciclo FOR per diminuirla.