LEDs Randomly smooth transitioning, accounting for black or how-to switch using HSV I am stuck trying to get it not to account for black in RGB.  My first instinct was to use the HSV color spectrum over the RGB rainbow but, the same code will behaves differently in HSV.  If i could get the same effect in HSV I would, and that would account for the black, but I have not found a solution for that or the accounting for black in RGB.  Here is my code:

#include &lt;FastLED.h&gt;

#define LED_COUNT     96
#define LED_OUT       13
#define BUTTON_IN     10
#define ANALOG_INPUT  A9
#define EXTRA_PIN_A    7
#define EXTRA_PIN_B   11

struct CRGB leds[LED_COUNT];

void setup() {
  Serial.begin(57600);
  LEDS.addLeds&lt;WS2812B, LED_OUT, GRB&gt;(leds, LED_COUNT);
  LEDS.show();
}

void colorLoop() {

  static int Col1;
  static int Col2;
  static int Col3;

  static int C1;
  static int C2;
  static int C3;

  if ((((Col1 == 0) || (Col1 == 250)) &amp;&amp; (((Col2 == 0) || (Col2 == 250)) &amp;&amp; ((Col3 == 0) || (Col3 == 250))))) {

    // select a random number from 1 to 2 for the array
    C1 = random(1, 3);
    C2 = random(1, 3);
    C3 = random(1, 3);
  }

  if (((C1 == 1) &amp;&amp; (Col1 != 0))) {
    Col1 = (Col1 - 10);
  }
  if (((C2 == 1) &amp;&amp; (Col2 != 0))) {
    Col2 = (Col2 - 10);
  }
  if (((C3 == 1) &amp;&amp; (Col3 != 0))) {
    Col3 = (Col3 - 10);
  }


  if (((C1 == 2) &amp;&amp; (Col1 != 250))) {
    Col1 = (Col1 + 10);
  }
  if (((C2 == 2) &amp;&amp; (Col2 != 250))) {
    Col2 = (Col2 + 10);
  }
  if (((C3 == 2) &amp;&amp; (Col3 != 250))) {
    Col3 = (Col3 + 10);
  }

  for (uint8_t i = 0; i &lt; LED_COUNT; i++) {
    leds[i] = CRGB(Col1, Col2, Col3);
  }
  delay(100);
  LEDS.show();
}

void loop() {
  colorLoop();
}
Black will basically be when all the colours have reduced to 0. That can only happen when all three of C1, C2 and C3 are 1. So you basically need to ensure that never happens.

And that is simple enough to arrange, with a "try again" construct:

if ((((Col1 == 0) || (Col1 == 250)) &amp;&amp; (((Col2 == 0) || (Col2 == 250)) &amp;&amp; ((Col3 == 0) || (Col3 == 250))))) {

    // select a random number from 1 to 2 for the C1,C2,C3 array
    do {
        C1 = random(1, 3);
        C2 = random(1, 3);
        C3 = random(1, 3);
    } while ((C1 == 1) &amp;&amp; (C2 == 1) &amp;&amp; (C3 == 1));
}


Pick three numbers. If they are all 1 then you are destined towards black. So go back and pick three new random numbers. Keep trying until you get at least one result that isn't 1.