Go Down

Topic: Übergänge zwischen RGB Farben (Read 785 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy