Ho letto ora il post e mi sono venuti un paio di dubbi ... tu esattamente "come" vuoi fare il fading ? ... colori separati (cioe', prima uno da zero al massimo e poi di nuovo a zero, poi il secondo, poi il terzo), o mix dei 3 in proporzione di un terzo ? (cioe' come, ad esempio, l'incrocio delle sinusoidi in una trifase ?)
Anche perche' 256 non puo essere diviso esattamente per 3, nel secondo caso (la scala va da 0 a 255, quindi sono 256 valori), per cui per poter fare tre rampe regolari da mixare, o vai da 0 a 254, o da 1 a 255 (dato che 255, invece, puoi dividerlo per 3 senza decimali di resto)
Poi, se e' il secondo caso, non ti basta partire con i valori iniziali di un terzo, due terzi e full ... cioe', ad esempio, 80, 165 e 250 per R, G e B, o nell'ordine che vuoi, (basta che nessun valore iniziale sia 1 o 255, per non "falsare" il primo controllo negli if) e fare una semplice sequenza di 3 if/else consecutivi e 3 flag per sapere se devono sommare o sottrarre (alle flag cambi valore quando <=255 e quando <=1, dentro gli stessi if) ?
Cioe', una cosa tipo
int R = 5;
int G = 6;
int B = 3;
byte fadeR = 80;
byte fadeG = 165;
byte fadeB = 250;
byte flag1 = 1;
byte flag2 = 1;
byte flag3 = 1;
unsigned long ZERO;
unsigned long tempo;
void setup(){
pinMode(R, OUTPUT);
pinMode(G, OUTPUT);
pinMode(B, OUTPUT);
zero = millis();
}
void loop(){
analogRead(A5);
tempo = map(analogRead(A5), 0, 1023, 10, 210);
if(millis() - zero > tempo){
if(flag1 == 1){
fadeR++;
if(fadeR >= 255) flag1=0;
analogWrite(R, fadeR);
}
else if(flag1 == 0){
fadeR--;
if(fadeR <= 1) flag1=0;
analogWrite(R, fadeR);
}
if(flag2 == 1){
fadeG++;
if(fadeG >= 255) flag2=0;
analogWrite(G, fadeG);
}
else if(flag2 == 0){
fadeG--;
if(fadeG <= 1) flag2=0;
analogWrite(G, fadeG);
}
if(flag3 == 1){
fadeB++;
if(fadeB >= 255) flag3=0;
analogWrite(B, fadeB);
}
else if(flag3 == 0){
fadeB--;
if(fadeB <= 1) flag3=0;
analogWrite(B, fadeB);
}
zero = millis();
}
}
EDIT: completato, ma l'ho buttato giu al volo col notepad partendo dal tuo, devi controllarlo ...