I think this will do close to what you want.
#include <FastSPI_LED.h>
#define NUM_LEDS 96
struct CRGB {
unsigned char r;
unsigned char g;
unsigned char b;
};
struct CRGB *leds;
#define PIN 4
void setup() {
pinMode(5, INPUT);
FastSPI_LED.setLeds(NUM_LEDS);
FastSPI_LED.setChipset(CFastSPI_LED::SPI_WS2801);
FastSPI_LED.setDataRate(3);
//FastSPI_LED.setChipset(CFastSPI_LED::SPI_LPD6803);
//FastSPI_LED.setChipset(CFastSPI_LED::SPI_HL1606);
//FastSPI_LED.setChipset(CFastSPI_LED::SPI_595);
//FastSPI_LED.setChipset(CFastSPI_LED::SPI_WS2801);
FastSPI_LED.setPin(PIN);
FastSPI_LED.init();
FastSPI_LED.start();
leds = (struct CRGB*)FastSPI_LED.getRGBData();
memset(leds, 0, NUM_LEDS * 3);
}
void loop() {
int button = analogRead(5);
// If the button is down, insert a random color at the beginning of the strip
if(button > 1000) {
leds[0].r = random(256);
leds[0].g = random(256);
leds[0].b = random(256);
}
// Show the current pattern
FastSPI_LED.show();
delay(30);
// Move all the lights down one step
for(int i = NUM_LEDS-1; i > 0; i-- ) {
leds[i].r = leds[i-1].r;
leds[i].g = leds[i-1].g;
leds[i].b = leds[i-1].b;
leds[0].r = 0;
leds[0].g = 0;
leds[0].b = 0;
}
}
EDIT: Oops. The loop should have started at NUM_LEDS-1. Fixed it