Programming individual lights for an Adafrut RGB WS2801 LED strand

Hello everyone!

These are the LEDs I’m using: https://www.adafruit.com/products/738

I would like to control each RGB light individually. (I’ll explain more below).

For Example: There are 25 RGB leds in this string.

I would like to turn LEDs 1-4 on for 1 second, then off

wait 5 seconds

Turn LEDs 8-13 on for 2 seconds, and then off

The below code was part of a much longer example sketch that I trimmed down the bare minimum, but it’s still not exactly what I need. If any experienced coders would like to take crack at this, I would appreciate it. Thanks!

#include "Adafruit_WS2801.h"
#include "SPI.h" // Comment out this line if using Trinket or Gemma
#ifdef __AVR_ATtiny85__
 #include <avr/power.h>
#endif

// Choose which 2 pins you will use for output.
// Can be any valid output pins.
// The colors of the wires may be totally different so
// BE SURE TO CHECK YOUR PIXELS TO SEE WHICH WIRES TO USE!
uint8_t dataPin  = 2;    // Yellow wire on Adafruit Pixels
uint8_t clockPin = 5;    // Green wire on Adafruit Pixels

// Set the first variable to the NUMBER of pixels. 25 = 25 pixels in a row
Adafruit_WS2801 strip = Adafruit_WS2801(25, dataPin, clockPin);

// Optional: leave off pin numbers to use hardware SPI
// (pinout is then specific to each board and can't be changed)
//Adafruit_WS2801 strip = Adafruit_WS2801(25);

void setup() {
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000L)
  clock_prescale_set(clock_div_1); // Enable 16 MHz on Trinket
#endif

  strip.begin();

  // Update LED contents, to start they are all 'off'
  strip.show();
}


void loop() {
  // Some example procedures showing how to display to the pixels
  
 
  colorWipe(Color(0, 197, 255), 50);
  
  
  //colorWipe(Color(0, 0, 0), 50); //50 is the delay?
}

// fill the dots one after the other with said color
// good for testing purposes                                              
//C is color translated from RGB           
//1 is number 2of25 on the LED string
void colorWipe(uint32_t c, uint8_t wait) {
  
  
      //number is LED vaule
      strip.setPixelColor(1, c);
 
      strip.show();
      delay(wait);
  
}


/* Helper functions */

// Create a 24 bit color value from R,G,B
uint32_t Color(byte r, byte g, byte b)
{
  uint32_t c;
  c = r;
  c <<= 8;
  c |= g;
  c <<= 8;
  c |= b;
  return c;
}
strip.setPixelColor(1, c);

Do you see what this line is doing? It's setting the first pixel to the color c. That's the line you're looking for. Set the colors of the first four leds to whatever and set the others to off. Call strip.show() to light them up. Wait a while, then set leds 8 to 13 to a color and set 1 - 4 back to off and call show again. I don't see what is confusing about that.

Give it a crack and post what you get and an explanation of what happens with the code and how that compares to what you want and we'll help you track down the issue.