Go Down

Topic: Übergänge zwischen RGB Farben (Read 711 times) previous topic - next topic

fl3xizzz

Ich möchte eine Funktion schreiben die Farbübergänge ermöglicht. Die Farben meiner RGB Led gebe ich mit Hex an.

als Beispiel möchte ich von:#f59000 auf #0039f5 faden.

Nun meine Frage wie könnte ich das am besten realisieren oder was gibt es da so für Ansätze?

freue mich auf eure Antworten :-)

uwefed

Mir fällt eine FOR Schleife ein und 3 MAP

for (int i=0; i<256;i++)
{
rosso = map (i, 0, 255, 0xf5, 0x00 )
verde = map (i, 0, 255, 0x90, 0x39)
blu = map (i, 0, 255, 0x00, 0xf5)
Ausgabe auf  LED RGB;
Verzögerung;
}
Grüße Uwe

jurs


Mir fällt eine FOR Schleife ein und 3 MAP


Mir fällt eine selbstgeschriebene "blend()" Funktion ein, der man einen float-Parameter zwischen 0 und 1 übergibt, in dem vorgegeben wird, wie weit der Effekt fortgeschritten sein soll (0= gar nicht, 1= beendet, zwischen 0 und 1 = irgendwas dazwischen)

Anbei "blend()" Funktion mit Demo-Sketch und Überblendungsbeispiel in Prozentschritten.

Code: [Select]

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

}

byte blend(byte a, byte b, float progress)
// Use for RGB blend effect
// a: starting value
// b: ending value
// progress: float value between 0 and 1
// progress=0 ==> return a
// progress=1 ==> return b
// progress between 0 and 1 ==> return value between a and b
{
  return ((1-progress)*a + progress*b)+0.49999;
}


void loop() {
  // Überblenden in 101 Schritten von 0 bis 100 (z.B. Prozent)
  byte r,g,b;
  for (int i=0;i<101;i++)
  {
    Serial.println(i);
    r=blend(0xf5,0x00,i/100.0);
    g=blend(0x90,0x39,i/100.0);
    b=blend(0x00,0xf5,i/100.0);
    Serial.print(r);Serial.print(" ");
    Serial.print(g);Serial.print(" ");
    Serial.print(b);Serial.print(" ");
    Serial.println();
  }
  while (true==true); 
}

uwefed

Interessanter Ansatz:
Code: [Select]
while (true==true);
Was soll das machen?
Ich weiß schon, daß das eine Endlosschleife sein soll, aber:
Code: [Select]
while (1){}; ist einfacher.
Kontrollierst Du ob die Variable "true" true ist oder ob die Konstante true true ist oder ob true gleich true ist?   ;) ;) ;)
Grüße Uwe

jurs


Interessanter Ansatz:
Code: [Select]
while (true==true);
Was soll das machen?


Diese Programmzeile steht für die Suche nach Wahrheit zwischen Gegenwart und Ewigkeit.
;)



Go Up