Hab mich kurz hingesetzt und das Ding gebastelt...
Kann man bestimmt noch aufhübschen, aber es funktioniert.
unsigned int pPin = 0; // Pin des Potis
unsigned int pVal, tempVal = 0; // Wert des Potis und TempVariable
unsigned int pRes = 1023; // Maximalwert des Potis
double pCol = 170; // 1024/6 = ca 170; Wertebereich der Farben
double dr,dg,db = 0; // Double der Farben um dividieren zu können.
unsigned int r,g,b = 0; // Int der Farben für absolute Werte
void setup()
{
Serial.begin(9600);
}
void loop()
{
tempVal = pVal;
pVal = analogRead(pPin);
// alle Farben auf null;
r = g = b = 0;
// rot an
if (pVal < pCol)
{
dr = pVal/pCol*256;
r = (int)dr;
}
// grün dazu
if (pVal < pCol*2 && pVal > pCol)
{
r = 255;
dg = (pVal-pCol)/pCol*256;
g = (int)dg;
}
// rot weg
if (pVal < pCol*3 && pVal > pCol*2)
{
g = 255;
dr = 256 - ((pVal-pCol*2)/pCol*256);
r = (int)dr;
}
// blau dazu
if (pVal < pCol*4 && pVal > pCol*3)
{
g = 255;
db = (pVal-pCol*3)/pCol*256;
b = (int)db;
}
// grün weg
if (pVal < pCol*5 && pVal > pCol*4)
{
b = 255;
dg = 256 - ((pVal-pCol*4)/pCol*256);
g = (int)dg;
}
// rot dazu
if (pVal <= pCol*6 && pVal > pCol*5)
{
b = 255;
dr = (pVal-pCol*5)/pCol*256;
r = (int)dr;
}
// Freilauf des Potis am Ende - 100% Blau, 100% rot
if (pVal > 1015)
{
r=b=255;
}
// nur bei Wertveränderung schreiben
if (tempVal != pVal)
{
Serial.print("pval: ");
Serial.print(pVal);
Serial.print(" r:");
Serial.print(r);
Serial.print(" g:");
Serial.print(g);
Serial.print(" b:");
Serial.print(b);
Serial.println();
}
}
Grüße
Marcus