Un paio d'anni fa feci uno sfumo incrociato per un LED RGB. Per ottenere variazioni di luminosità piacevoli adottai una tabella:
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;
// I/O9:LED R; I/O10:LED G; I/O11:LED B;
void setup()
{
Serial.begin(9600);
}
void loop()
{
for(nR=0;nR<69;nR++)
{
analogWrite(9,Z[nR]);
nG=nR+23; if(nG>68) nG-=69;
analogWrite(10,Z[nG]);
nB=nR+46; if(nB>68) nB-=69;
analogWrite(11,Z[nB]);
/*
Serial.print(nR);
Serial.print(" ");
Serial.print(nG);
Serial.print(" ");
Serial.println(nB);
X=int((Z[n]%100)/10);
Calc();
Serial.print(X);
Serial.print(" ");
analogWrite(10,X);
X=int(Z[n]%10);
Calc();
Serial.println(X);
analogWrite(11,X);
*/
delay(10);
}
}