Ecco il codice commentato:
// Faccio un array contenente 69 valori da assegnare in successione alle uscite PWM per avere una variazione di luminosità gradevole (li ho aggiustati sperimentalmente):
int Z[69]={1,3,5,8,10,16,20,23,27,30,40,50,63,80,90,105,120,135,148,158,170,180,200,220,240,255,240,220,200,180,170,158,148,135,120,105,90,80,63,50,40,30,27,23,20,16,10,8,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
byte nR;
byte nG;
byte nB;
void setup(){} // Non c'è nulla
void loop()
{
for(nR=0;nR<69;nR++) // Per nR da 0 a 68:
{
analogWrite(9,Z[nR]); // Pilota il PWM dell'I/O 9 con i valori dell'array
nG=nR+23; if(nG>68) nG-=69;
analogWrite(10,Z[nG]); // Pilota il PWM dell'I/O 10 prendendo i valori dell'array sfasati di 23 elementi (arrivato all'ultimo elemento, ricomincia dal primo)
nB=nR+46; if(nB>68) nB-=69;
analogWrite(11,Z[nB]); // Pilota il PWM dell'I/O 11 prendendo i valori dell'array sfasati di 46 elementi (arrivato all'ultimo elemento, ricomincia dal primo)
delay(10); // Attende 10mS prima di ricominciare con il valore successivo di nR.
} // Finito il for(), ripete a partire da nR=0.
}