This works as proof for SPI and pixel control ... sort of .
The code itself is terrible and of no use other than proving SPI works .

I have 12v ws2801 strings and had to shed a lot of voltage to get color .
A 1mohm resistor on the data line solved this ---Phew frustrating .

Here is the code to play with .

Code:
// Include the SPI library.
#include <SPI.h>



//static const int spiClk = 1000000; // 1 MHz
void setup()
{
  Serial.begin(115200);
  Serial.println(MOSI);// this gets clipped on boot
  Serial.println(MISO);
  Serial.println(SCK);
  Serial.println(SS);
  Serial.println(MOSI);// for Pin # clearity
  Serial.println(MISO);
  Serial.println(SCK);
  Serial.println(SS);
  delay(50);

  //SPI.begin();  // initialize SPI hardware
  SPI.begin(); //Transaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
}

void loop()
{
  static int cycle = 0;

  // on each iteration, shift out RGB data for several pixels, then delay to allow the device to update.
  for (int pixel = 0; pixel < 3; pixel++) {
    uint8_t red   =  1 * (cycle + 8 * pixel); // Play with the #'s
    uint8_t green =  4 * (cycle + 6 * pixel);
    uint8_t blue  =  7 * (cycle + 4 * pixel);

    
    SPI.transfer( red );
    SPI.transfer( green );
    SPI.transfer( blue );

  }
  delay(1);
  cycle++;   // update the overall animation

  // add a delay to control the overall frame rate
  delay(1000); // this is set for slow motion

}