FastLED, alle Farben mit RotaryEncoder einzeln durchschalten...

Ich möchte zum Testen, welche Farben für meine Zwecke geeignet sind, alle Farben die mit einem Keyword (AliceBlue=0xF0F8FF, Amethyst=0x9966CC, AntiqueWhite=0xFAEBD7, Aqua=0x00FFFF, Aquamarine=0x7FFFD4 usw) aufrufbar sind mit einem RotaryEncoder einzeln durchschalten und dabei die Farbe mit serial.println anzeigen lassen um sie mir ggf. zu notieren.
Es reicht mir nicht die Farben auf einer Internetseite zu sehen :slight_smile: Es geht darum zu sehen welche Farben für eine Lichtleitfaser infrage kommen.

Den Encoder Code habe ich, es geht hier nur um den FastLED code dazu. Wie schreibe ich mir nun FastLED code um damit die Farben einzeln durchzuschalten?
Natürlich nicht jede Farbnuonce oder Heilligkeit. Immer die volle Helligkeit...

Angeschlossen ist nur eine smd WS2812 die die Farbe anzeigen soll.

Prinzipiell brauche ich eine Möglichkeit den

   typedef enum {
        AliceBlue=0xF0F8FF,
...
..
.
 } HTMLColorCode;

einzeln durchzugehen. Leider weis ich nicht wie ich darauf zugreifen kann und die einzelnen Einträge durchgehen kann.

Hat jemand eine Idee?

Danke![/code]

enum ist hier garnicht notwendig.

const byte NUM_COLORS = 5;
unsigned long colors[5] =
{
0x0000FF, 0x00FF00, 0xFF0000, ....
};

Höchstwahrscheinlich interessieren dich nur Farben mit voller Sättigung und maximaler Helligkeit. Daher bietet sich der HSB/HSV Farbraum an, der von der FastLed Bibliothek unterstützt wird. Saturation (S) und Brightness/Value (B bzw V) setzt du dabei immer auf 255 und wählst nur den Farbton Hue (H) mit dem Encoder. Die Arrays oder enums sind dann unnötig.

Danke für die schnellen Antworten.

Bei der Methode von @sschultewolter, hätte ich alle Werte herauskopieren müssen. Was ich sicherlich auch gemacht hätte wenn da nicht @MGOS einen neuen Ansatz geliefert hätte :slight_smile:

mappedHue = map(counter, 0, 80, 0, 255);
leds[0] = CHSV(mappedHue, 255, 255);
...
..
.

Die etwas grobe Einstellung von 80 reicht völlig aus für meine Zwecke.

leds[i] = CHSV(mappedHue, 255, 255);

gibt Dir die Farben der aus der vordefinierten Rainbow-Tabelle.

Später kannst Du Dir "Deine" Farben in einer Palette speichern und von dort mit

leds[i] = ColorFromPalette( currentPalette, mappedHue, brightness, currentBlending);

abrufen. Dabei kannst Du z.B. gelb neben blau legen (inkl. weichem Übergang) oder dergleichen.

Nur mal aus Interesse: Wie liest Du den Encoder ohne Interrupts aus?
Weil Interrupts + WS2812 geht doch eigentlich nicht?!

Geht schon, aber man muss sich nicht wundern, wenn einige Umdrehungen verschluckt werden! Sinnvoller wäre hier vermutlich einfach nur einen Poti.

Gibt es zu dem "ColorFromPalette" eine Uebersicht bzw eine Anleitung?

Ja, hier zum Beispiel.