Adjusted the linear led table and hsv_to_rgb to better handle 255 hue (#5739)

* Adjusted the linear led table and hsv_to_rgb to better handle 255 hue

* small math adjustments to better handle specific uint8_t rounding and overflows
pull/5754/head 0.6.352
XScorpion2 6 years ago committed by MechMerlin
parent 3235c8527d
commit 12a07dae33

@ -22,8 +22,8 @@
RGB hsv_to_rgb( HSV hsv ) RGB hsv_to_rgb( HSV hsv )
{ {
RGB rgb; RGB rgb;
uint8_t region, p, q, t; uint8_t region, remainder, p, q, t;
uint16_t h, s, v, remainder; uint16_t h, s, v;
if ( hsv.s == 0 ) if ( hsv.s == 0 )
{ {
@ -37,8 +37,8 @@ RGB hsv_to_rgb( HSV hsv )
s = hsv.s; s = hsv.s;
v = hsv.v; v = hsv.v;
region = h / 43; region = h * 6 / 255;
remainder = (h - (region * 43)) * 6; remainder = (h * 2 - region * 85) * 3;
p = (v * (255 - s)) >> 8; p = (v * (255 - s)) >> 8;
q = (v * (255 - ((s * remainder) >> 8))) >> 8; q = (v * (255 - ((s * remainder) >> 8))) >> 8;
@ -46,6 +46,7 @@ RGB hsv_to_rgb( HSV hsv )
switch ( region ) switch ( region )
{ {
case 6:
case 0: case 0:
rgb.r = v; rgb.r = v;
rgb.g = t; rgb.g = t;

@ -19,38 +19,28 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef USE_CIE1931_CURVE #ifdef USE_CIE1931_CURVE
// Lightness curve using the CIE 1931 lightness formula // Lightness curve using the CIE 1931 lightness formula
//Generated by the python script provided in http://jared.geek.nz/2013/feb/linear-led-pwm //Generated by the python script provided in http://jared.geek.nz/2013/feb/linear-led-pwm
const uint8_t CIE1931_CURVE[] PROGMEM = { const uint8_t CIE1931_CURVE[256] PROGMEM = {
0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6,
3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11,
5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 16, 16, 16,
7, 8, 8, 8, 8, 9, 9, 9, 10, 10, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24,
10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 25, 25, 26, 26, 27, 28, 28, 29, 29, 30, 31, 31, 32, 33, 33, 34,
13, 14, 14, 15, 15, 15, 16, 16, 17, 17, 35, 35, 36, 37, 37, 38, 39, 40, 40, 41, 42, 43, 44, 44, 45, 46,
17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 47, 48, 49, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 75, 76, 77, 78,
28, 28, 29, 29, 30, 31, 31, 32, 32, 33, 79, 80, 82, 83, 84, 85, 87, 88, 89, 90, 92, 93, 94, 96, 97, 99,
34, 34, 35, 36, 37, 37, 38, 39, 39, 40, 100, 101, 103, 104, 106, 107, 108, 110, 111, 113, 114, 116, 118, 119, 121, 122,
41, 42, 43, 43, 44, 45, 46, 47, 47, 48, 124, 125, 127, 129, 130, 132, 134, 135, 137, 139, 141, 142, 144, 146, 148, 149,
49, 50, 51, 52, 53, 54, 54, 55, 56, 57, 151, 153, 155, 157, 159, 161, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180,
58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 182, 185, 187, 189, 191, 193, 195, 197, 200, 202, 204, 206, 208, 211, 213, 215,
68, 70, 71, 72, 73, 74, 75, 76, 77, 79, 218, 220, 222, 225, 227, 230, 232, 234, 237, 239, 242, 244, 247, 249, 252, 255
80, 81, 82, 83, 85, 86, 87, 88, 90, 91,
92, 94, 95, 96, 98, 99, 100, 102, 103, 105,
106, 108, 109, 110, 112, 113, 115, 116, 118, 120,
121, 123, 124, 126, 128, 129, 131, 132, 134, 136,
138, 139, 141, 143, 145, 146, 148, 150, 152, 154,
155, 157, 159, 161, 163, 165, 167, 169, 171, 173,
175, 177, 179, 181, 183, 185, 187, 189, 191, 193,
196, 198, 200, 202, 204, 207, 209, 211, 214, 216,
218, 220, 223, 225, 228, 230, 232, 235, 237, 240,
242, 245, 247, 250, 252, 255,
}; };
#endif #endif
#ifdef USE_LED_BREATHING_TABLE #ifdef USE_LED_BREATHING_TABLE
const uint8_t LED_BREATHING_TABLE[] PROGMEM = { const uint8_t LED_BREATHING_TABLE[256] PROGMEM = {
0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 9, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 9,
10, 11, 12, 14, 15, 17, 18, 20, 21, 23, 25, 27, 29, 31, 33, 35, 10, 11, 12, 14, 15, 17, 18, 20, 21, 23, 25, 27, 29, 31, 33, 35,
37, 40, 42, 44, 47, 49, 52, 54, 57, 59, 62, 65, 67, 70, 73, 76, 37, 40, 42, 44, 47, 49, 52, 54, 57, 59, 62, 65, 67, 70, 73, 76,

Loading…
Cancel
Save