Arduino - Wie der Zyklus durch hex-Farben von 000000 bis FFFFFF?
Habe ich ein Projekt mit einem LED-Modul, das verwendet eine 3-Farben-LED, die gesteuert werden können, indem in einen RGB-hex-Farbe, z.B. 22AAFF
Wie konnte ich Zyklus von 000000
zu FFFFFF
wenn ich mit diesem zu starten?
long color = 0x000000;
Ich möchte eine Schleife, die nicht jeder iteration und zeigt jede mögliche Farbe, am Ende mit
color = 0xFFFFFF
Ich bin mir nicht sicher, ob mein Verständnis von der hex-Darstellung der Farben macht Sinn!?
- Sie benötigen einen hex-string oder ein int-Wert?
- Du gehst zu verbringen eine lange Zeit auf der Suche nach der leds. Das sind mehr als 16 Millionen verschiedene Farben.
- Jede mögliche Farbe bilden 0x000000 auf 0xFFFFFF ist 16777216 Farben. Wenn man sich jede Farbe für eine Sekunde, und weiter so 8 Stunden am Tag, 5 Tage pro Woche, sind es 27 Monate, um zu sehen, in allen Farben. Wenn Sie nicht Angst, Sie können verwenden Sie eine Schleife wie diese:
for (color = 0; color <= 0xFFFFFF; ++color) { ... }
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ist falsch mit der offensichtlichen
for (int color = 0x000000; color <= 0xFFFFFF; ++color)
?Können Sie es so machen
Aber wie es bereits erwähnt wurde in den comments, das wird eine lange Zeit dauern, um alle der 16 Millionen Farben nicht zu erwähnen, dass die leds können nicht angezeigt werden all diese Farben, so möchten Sie wahrscheinlich so etwas wie dieses:
step
teilen sollte 255, nicht 256. Das heißt, es können nur 3, 5, 17 oder ein Produkt von denen.Ich denke, Sie wollen nicht, um eine Schleife durch Alle Farben, aber durch den FARBTON-Kanal im HSV(HSB) - Farbmodell. Wenn dies so ist, können Sie google für die Umsetzung der Funktion, die wandelt HSV-Wert in RGB. Und Ihr code wird wie folgt Aussehen:
Eine der möglichen Implementierungen finden Sie hier.
Wenn Sie nicht möchten, die Mühe mit dieser Funktion können Sie mithilfe dieser dummy-loops:
Kann ich leider nicht testen, aber ich denke, es sollte ohne Probleme funktionieren. Und natürlich kann man optimieren, wie Sie wollen.
unsigned int i
ist immer>=0
so gibt es ein paar endlosen Zyklen im code...i
einfacher und lesbarer als diese? Und diese wird nie genannt, miti == 0
, das ist irgendwie nicht das, was Sie wollte?i == 0
undi == 0xFF
imwhile
-loops. Sie erscheinen in der folgenden und vorhergehendenfor
-Schleifen jeweils.