Hey zusammen, bisher habe ich einen Farbdurchgang einer einzelnen RGB LED etwa so umgesetzt: for(int i=0;i<240;i++) Anteil_Rot=i; Anteil_Gruen=240-i; delay(5) das jeweils für die 3 durchgänge. Klappt ja soweit wunderbar. Aber wie kann ich nun mehrere RGB LEDs diese sequenzen durchlaufen lassen, wobei jede LED der vorherigen ein bisschen voreilt/nacheilt in der Farbe. Meine Lösung ging bisher in diese Richtung: for(int i=0;i<240;i++) Anteil_Rot1=i; Anteil_Gruen1=240-i; Anteil_Rot2=Anteil_Rot1+60; if(Anteil_Rot2>240)Anteil_Rot2-=240; Anteil_Gruen2=240-Anteil_Rot2; delay(5) wie fast schon erwartet habe ich nette sprünge in der Farbe bei den nachgeführten LEDs drin. Wundert mich auch eigntl nicht, aber dennoch komm ich im Moment nicht dahinter, wie ich die schleifen sinnvoller aufbaue, damit diese übergänge sauber sind. Habe auch schon versucht die RGBs erst in der ISR nachzuführen, aber hatte ähnliche ergebisse. Ich mein: RGB Strips wurden schon zu hauf gebaut. Einzelne LEDs einsteuern oder auch mehrere ist kein Problem. Nur diese permanente Farbwechsel mit mehreren Nachgeführten RGBs macht mir etwas Probleme. habt ihr ein Tipp, wo ich mir so Algos ansehen kann? Wird der Algo leichter, wenn ich im HSV-Raum nachführe? Denn dort hätte ich nur einen Parameter für die Farbe, anstatt 3. Die 3 Parameter ordentlich nachzuführen macht mir echt Probleme... LG Peter
Formel von LED 1 - LED n ist gleich! Startwert nicht! Zum Beispiel so: (Der Übersichtlichkeit halber hier nicht optimiert.)
1 | Anteil_Gruen1 = 0; |
2 | Anteil_Gruen2 = 10; |
3 | Anteil_Gruen3 = 20; // Startwerte versetzt |
4 | |
5 | while(1) |
6 | {
|
7 | Anteil_Gruen1=240-Anteil_Rot1; |
8 | Anteil_Gruen1 ++; |
9 | if(Anteil_Gruen1 == 240) |
10 | {Anteil_Gruen1 = 0;} |
11 | |
12 | Anteil_Gruen2=240-Anteil_Rot2; |
13 | Anteil_Gruen2 ++; |
14 | if(Anteil_Gruen2 == 240) |
15 | {Anteil_Gruen2 = 0;} |
16 | |
17 | Anteil_Gruen3=240-Anteil_Rot3; // alle 3 bis auf Variabelnamen gleich |
18 | Anteil_Gruen3 ++; |
19 | if(Anteil_Gruen3 == 240) |
20 | {Anteil_Gruen3 = 0;} |
21 | }
|
Wenns nur darum geht, dass eine LED einer anderen in der Farbe folgt, würde ich das so machen
1 | for(int i=0;i<240;i++) |
2 | {
|
3 | Anteil_Rot2 = Anteil_Rot1; |
4 | Anteil_Gruen2 = Anteil_Gruen1; |
5 | |
6 | Anteil_Rot1 = i; |
7 | Anteil_Gruen1 = 240-i; |
8 | |
9 | delay(5); |
10 | }
|
d.h. die 2.te LED übernimmt einfach die Farbe der 1.ten LED, noch ehe die erste LED eine andere Farbe bekommt. Wenn dann eine 3.te LED im Spiel ist, dann eben eine Stufe weiter. Die 3.te kriegt die Farbe der 2.ten, die 2.te die der 1.ten und die der 1.ten wird neu ausgerechnet. Was immer dann die erste LED macht, wirkt sich verzögert auf die 2.te und nochmal verzögert auf die 3.te aus. Wenn der Zeitversatz nicht reicht, könnte man noch eine Queue zwischen die jeweiligen LED schalten, die den Zeitversatz vergrößert, indem die neuen Werte dann einfach n Takte brauchen um die Queue zu durchlaufen.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.