@michael_x: Den “Unsinn in mehrfacher Hinsicht” muss ich entschieden zurückweisen.
Bitte mal kurz hier den Absatz “Dimming and Brightening Colors” nachlesen. Danke.
- %127 lässt die Werte 0 … 126 unverändert und reduziert die Werte 127 … 254 um genau 127
( oder meintest du “auf den halben Bereich begrenzen”)
Unsinn!
Das ist die Kurzform von
leds[120].g = scale8( leds[120].g, 127);
Eine lineare Skalierung.
Anders ausgedrückt:
You can also express this the other way: that you want to dim the pixel to 75% of its current brightness. 75% = 192/256. There are two ways to write this, both of which will do the same thing. The first uses the %= operator; the rationale here is that you’re setting the new color to “a percentage” of its previous value
Aber nscale8 verändert (skaliert proportional) r, g und b zugleich (arbeitet am CRGB - reduziert die Gesamthelligkeit unter Beibehaltung der Farbe). Wollen wir nicht. Wir wollen einzelne Farbkanäle skalieren.
Deshalb so, wie von mir beschrieben.
Wenn tatsächlich halbiert wird, sollte man schauen, dass diese Operation nur einmal gemacht wird, nachdem die Variable ihren noch zu korrigierenden Wert erhalten hat.
Mein Beispiel mit der (fast) Halbierung war bescheuert gewählt, das geht natürlich mit Bitschieben schneller.
Ja, die Korrektur darf nur einmal gemacht werden - und zwar direkt vor dem Schreiben der LEDs. Wie von mir beschrieben.
Und dann würde ich sagen ist beides bei “analog out” nicht anwendbar, oder?
Doch, das ist genau so anwendbar, sonst hätte ich es Dir nicht geschrieben.
nur passen die Farben nicht zu 100%- so, dass ich quasi eine Kalibrierung vornehmen möchte…
Glaub´ mir, ich habe Dein Problem vollständig verstanden. Du musst bei LED(Gruppen) die Grundfarben runterskalieren, um alle RGB-Sets auf eine gleiche Farbtemperatur zu bringen.
Schreibe Dir Schleifen für die betreffenden LEDs und dimme die Einzelfarben runter.
leds[i].r = scale8( leds[i].r, red_correction);
leds[i].g = scale8( leds[i].g, green_correction);
leds[i].b = scale8( leds[i].b, blue_correction);
Der correction Wert gibt in 1/256 Schritten an, wieviel der Grundhelligkeit erhalten bleibt.
Und dieser Code macht exakt das Gleiche, wie
BULLSHIT:
leds[i].r %= red_correction;
leds[i].g %= green_correction;
leds[i].b %= blue_correction;
Gruß, H.