I'm trying to create a function that takes two colours and creates a smooth gradient between them one colour at the beginning and one at the end
I just can't figure the math of mixing them evenly
I'm using neopixel library
1 Answer 1
I can think of two ways of doing this.
One is to use the H channel of the HSV colour space (as I show in the answer to this question. This would give you a smooth transition between two colours through the pre-defined spectrum of the hue range.
The second is to simply specify two colours and then mix them at different percentages depending on how far along the length you are.
For example, here's a (untested) small function that "mixes" two individual colour channels together and returns the result:
uint8_t mix(uint8_t a, uint8_t b, int pct, int range) {
if (pct <= 0) return a;
if (pct >= range) return b;
return (((uint32_t)a * (range-pct)) / range) + (((uint32_t)b * pct) / range);
}
pct
is the led number in your chain, and range
is the total number of LEDs.
So you could (hypothetically):
uint8_t red1 = 0, green1 = 255, blue1 = 0;
uint8_t red2 = 255, green2 = 100, blue2 = 100;
for (int i = 0; i < 50; i++) {
uint8_t red = mix(red1, red2, i, 50);
uint8_t green = mix(green1, green2, i, 50);
uint8_t blue = mix(blue1, blue2, i, 50);
setLedColor(i, red, green, blue);
}
-
Very clever However, only one LED lights up, sorry I can't debug it myself :<Shiba-inu– Shiba-inu2020年05月11日 03:12:49 +00:00Commented May 11, 2020 at 3:12
-
My sketch: pastebin.com/0fYD6w3yShiba-inu– Shiba-inu2020年05月11日 03:26:57 +00:00Commented May 11, 2020 at 3:26
-
the sketch belongs in your question as text, not as a link ... please edit your question ... format the code properly using the
{}
buttonjsotola– jsotola2020年05月11日 05:33:02 +00:00Commented May 11, 2020 at 5:33 -
The
50
in my example code is the number of LEDs. Obviously you need to tune that to the actual number of LEDs in your setup.Majenko– Majenko2020年05月11日 09:39:05 +00:00Commented May 11, 2020 at 9:39 -
I tried both 8 leds and 50 and 7 counting from 0 but i think that even with more leds in sketch more than 1 led would light upShiba-inu– Shiba-inu2020年05月11日 14:20:38 +00:00Commented May 11, 2020 at 14:20