Pages: [1]   Go Down
Author Topic: Übergänge zwischen RGB Farben  (Read 685 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 :-)
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 272
Posts: 21939
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 174
Posts: 3286
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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); 
}
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 272
Posts: 21939
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Interessanter Ansatz:
Code:
while (true==true);
Was soll das machen?
Ich weiß schon, daß das eine Endlosschleife sein soll, aber:
Code:
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?   smiley-wink smiley-wink smiley-wink
Grüße Uwe
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 174
Posts: 3286
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Diese Programmzeile steht für die Suche nach Wahrheit zwischen Gegenwart und Ewigkeit.
 smiley-wink


Logged

Pages: [1]   Go Up
Jump to: