WS2803 versus WS2801

Nope, just a single one (for now.) One WS2803 with 18 output ports. Using the current WS2801 method to send data to it, lights up the 18 ports in groups of 6, and I figured out why.

I worked out one work around for now. Because the WS2801 library only sends out 24 bits, and WS2803 accepts 144 bits before it starts relaying, it made sense that when the code was sending data, the IC was simply waiting till it received 144 bits and then latched the data. I just never noticed it because there was no delay. So, what I did was the following:

  for (int i = 0; i < 6; i++) {
    switch (i) {
      case 0:
        strip.setPixelColor(i, Color(255, 0, 0));
        break;
      case 1:
        strip.setPixelColor(i, Color(0, 255, 0));
        break;
      case 2:
        strip.setPixelColor(i, Color(0, 0, 255));
        break;
      case 3:
        strip.setPixelColor(i, Color(255, 255, 0));
        break;
      case 4:
        strip.setPixelColor(i, Color(255, 0, 255));
        break;
      case 5:
        strip.setPixelColor(i, Color(0, 255, 255));
        break;
    }
    strip.show();
    delay(250);
  }

By grouping the ports in groups of 3 (R, G, B), I can then refer to them with index numbers 0 to 5. So when I sent Color(255, 0, 0), I was addressing the first group of 3 ports, setting out0 to 255, out1 to 0, and out2 as 0. This effectively turned on the first of the three ports. Sending Color(255, 0, 255) turned on ports 0 and 2 .... etc., etc.

Following the above, I'm turning on ports 0, delay, 4, delay, 8, delay, 9, 10, delay, 12, 14, delay, 16, and 17 successively. The rest are all off.

Like I said, this is a work around.