From 942cfd1fc2e1ebddd71667dbce2f317dc256b1c3 Mon Sep 17 00:00:00 2001 From: "R. Steve McKown" Date: Fri, 16 Dec 2011 20:47:13 -0700 Subject: [PATCH] Set up 10 fine-tuned colors, plus white Use 6 bits to represent the color, then fine-tune values to get 10 decent looking colors. --- main.c | 45 +++++++++++++++++++-------------------------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/main.c b/main.c index 738362c..aefd434 100644 --- a/main.c +++ b/main.c @@ -79,7 +79,7 @@ enum { HELD_TMR_PERIODS = 1, /* Held timer fires every 32.768 msec */ HELD_PERIODS = 16, /* Held this long before held events fire */ COLOR_WHITE = 0, /* Color index for white */ - COLOR_COUNT = 19, + COLOR_COUNT = 11, BRIGHT_TOP = 100, /* Bright ramps up to top ... */ BRIGHT_BOTTOM = -5, /* ... then down to bottom */ BRIGHT_MAX = 85, /* Bright values are constrained for computations */ @@ -88,7 +88,8 @@ enum { STD_FADE = 16, /* Fade time in 32.768 ms units */ STD_INCOLOR = 29491, /* Time in color when MODE_FADE, in 32.768 ms units */ PARTY_MIN = 8, /* Min party fade and incolor units */ - PARTY_RANGE = 8, /* Party fade/incolor range (max = min+range) */ + PARTY_RANGE = 8, /* Party fade/incolor range mask for rand() */ + /* ... see start_fade() */ }; typedef struct { @@ -97,27 +98,19 @@ typedef struct { signed char remainder; } led_t; -/* 18 available colors plus white, 2 bits per color, no white mix */ +/* Available colors, 6 bits per color (no values above 0x3f) */ const unsigned char colors[COLOR_COUNT][LED_COUNT] = { - { 3, 0, 0, 0 }, - { 3, 1, 0, 0 }, - { 3, 2, 0, 0 }, - { 3, 3, 0, 0 }, - { 2, 3, 0, 0 }, - { 1, 3, 0, 0 }, - { 0, 3, 0, 0 }, - { 0, 3, 1, 0 }, - { 0, 3, 2, 0 }, - { 0, 3, 3, 0 }, - { 0, 2, 3, 0 }, - { 0, 1, 3, 0 }, - { 0, 0, 3, 0 }, - { 1, 0, 3, 0 }, - { 2, 0, 3, 0 }, - { 3, 0, 3, 0 }, - { 3, 0, 2, 0 }, - { 3, 0, 1, 0 }, - { 3, 3, 3, 3 }, + { 0x28, 0x00, 0x00, 0x00 }, /* red */ + { 0x30, 0x20, 0x00, 0x00 }, /* orange */ + { 0x2c, 0x2c, 0x00, 0x00 }, /* yellow */ + { 0x20, 0x2c, 0x00, 0x00 }, /* yellow-green */ + { 0x00, 0x30, 0x00, 0x00 }, /* green */ + { 0x00, 0x30, 0x18, 0x00 }, /* green-cyan */ + { 0x00, 0x30, 0x28, 0x00 }, /* cyan */ + { 0x00, 0x18, 0x30, 0x00 }, /* cyan-blue */ + { 0x00, 0x00, 0x30, 0x00 }, /* blue */ + { 0x1c, 0x00, 0x30, 0x00 }, /* magenta */ + { 0x3f, 0x3f, 0x3f, 0x3f }, /* white */ }; unsigned char mode = MODE_SOLID; @@ -184,10 +177,10 @@ void start_fade() } /* Retrieve the destination color */ - newr = colors[color][LED_RED] << 8; - newg = colors[color][LED_GRN] << 8; - newb = colors[color][LED_BLU] << 8; - neww = colors[color][LED_WHT] << 8; + newr = colors[color][LED_RED] << 4; + newg = colors[color][LED_GRN] << 4; + newb = colors[color][LED_BLU] << 4; + neww = colors[color][LED_WHT] << 4; /* Compute increment per fade step, and remainder, for each led */ red.increment = (newr - red.value) / fade_steps; -- 2.39.2