Ich hab mal einen kleinen Regenbogenalgorithmus für ein Landkartenprojekt geschrieben, den könnte man für sowas vermutlich auch gut verwenden:
// Verwendete analoge ports
#define RD_PIN 3
#define GN_PIN 6
#define BL_PIN 9
// Die Anzahl der verwendeten RGB-Gruppen
#define COLORS_LEN 7
// Die verwendeten Farben in Gruppen {Rot, Grue, Blau}. Die Liste kann erweitert
// oder gekuerzt werden, dann aber nicht vergessen, das COLORS_LEN anzupassen!
int COLORS[COLORS_LEN][3] = {
{255, 0, 0}, {255, 255, 0}, {0, 255, 0}, {0, 255, 255}, {0, 0, 255}, {255, 0, 255},
{255, 0, 0} // Die letzte Farbe muss auch die erste Farbe sein!
};
long MAX, val;
void setup () {
// Nach 120 Sekunden von vorne anfangen, kann beliebig geaendert werden...
MAX = 1000 * 120;
}
void loop () {
val = millis() % MAX;
double i = (double)((COLORS_LEN-1)*val)/MAX;
analogWrite(RD_PIN,(int)(COLORS[(int)i][0]*(1-i+(int)i)+COLORS[(int)i+1][0]*(i-(int)i)));
analogWrite(GN_PIN,(int)(COLORS[(int)i][1]*(1-i+(int)i)+COLORS[(int)i+1][1]*(i-(int)i)));
analogWrite(BL_PIN,(int)(COLORS[(int)i][2]*(1-i+(int)i)+COLORS[(int)i+1][2]*(i-(int)i)));
}
Ich geb aber keine Garantie dafür, dass das ohne kleinere Anpassungen funktioniert, ich hab das grade eben auf die Schnelle von Java umgesetzt und keine Entwicklungsumgebung hier um es zu testen... ;)