]> oss.titaniummirror.com Git - rgblamp.git/commitdiff
Set up 10 fine-tuned colors, plus white
authorR. Steve McKown <rsmckown@gmail.com>
Sat, 17 Dec 2011 03:47:13 +0000 (20:47 -0700)
committerR. Steve McKown <rsmckown@gmail.com>
Sat, 17 Dec 2011 03:52:17 +0000 (20:52 -0700)
Use 6 bits to represent the color, then fine-tune values to get 10
decent looking colors.

main.c

diff --git a/main.c b/main.c
index 738362cb83d9dc938a6033948c8b67c417fd214f..aefd4349172fe20f8ac0c1abee8b74ed3895ced8 100644 (file)
--- 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;