Help with Sparkfun Button pad conroller SPI.

I'm attempting to interface an arduino with Sparkfun's "button pad controller spi". I can't seem to get the controller to respond.

Here is my code. If anyone has any ideas what I'm doing wrong, I would much appreciate the help!

#define SCK_PIN 13 // Clock
#define MISO_PIN 12
#define MOSI_PIN 11
#define SS_PIN 10 // Control Signal
 
byte red[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
byte green[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
byte blue[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
byte buttons[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 
 
//---------------------------------------
// SETUP AND LOOP
//---------------------------------------
 
// Set up Everything
void setup() {
  setupSPI();
}
 
// Loop
void loop() {
  
  digitalWrite(SS_PIN, HIGH);
  for(int i = 0; i < 16; i++)
  {
   transfer(red[i]); 
  }
  for(int i = 0; i < 16; i++)
  {
   transfer(green[i]); 
  }
  for(int i = 0; i < 16; i++)
  {
   transfer(blue[i]); 
  }
  for(int i = 0; i < 16; i++)
  {
   transfer(buttons[i]); 
  }
  digitalWrite(SS_PIN, LOW);
  delayMicroseconds(500);
 
}
 
//---------------------------------------
// SPI DATA
//---------------------------------------
 
void setupSPI()
{ 
 pinMode(SCK_PIN, OUTPUT);
 pinMode(MOSI_PIN, OUTPUT);
 pinMode(MISO_PIN, INPUT);
 pinMode(SS_PIN, OUTPUT);
 
 modeSPI(0);
 }
 
// Set SPI mode
void modeSPI(byte config)
{
  byte tmp;
 
  // enable SPI master with configuration byte specified
  SPCR = 0;
  SPCR = (config & 0x7F) | (1<<SPE) | (1<<MSTR);
  tmp = SPSR;
  tmp = SPDR;
}
 
// transfer a byte
byte transfer(byte value)
{
 SPDR = value;
while(!(SPSR & (1<<SPIF))) ;
return SPDR;
}

I don't have this controller but I guess you're not enabling the SPI communication correctly. In general, the CS (Chip Select) pin needs to be set to low to indicate start of communication and high to indicate end of communication. You're doing the opposite in the loop() function. Try replacing the digitalWrite(SS_PIN, HIGH) by digitalWrite(SS_PIN, LOW) at the beginning of loop() and replace digitalWrite(SS_PIN, LOW) with digitalWrite(SS_PIN, HIGH) at the end.
Hope this helps.

I figured out the problem. The spi clock wasn't slow enough for the device. The button pad controller is actually set up sort of wonky too - CS goes high to enable the device. The spi clock has to go to 50khz, but 250khz is the slowest I can go using arduino's built in stuff. Right now I'm using my own hand coded spi signal to get it working. Have any idea how to quickly extract all 8 bits sequentially from a byte for use with a binary signal?

I thought the minimum speed was 125 KHz for 16MHz clock (SPI2X = 0, SPR1 = 1, SPR0 = 1 -> Fosc/128) but anyway, that's still too fast.
I think your approach is the only way of reaching this 50KHz frequency.
Regarding the bit extraction, you can use bit shifting (see the >> operator in C) ie something like this:

byte mask  = 1;
for (int i = 0; i < 8; i++)
{
   digitalWrite(PIN,(data & mask ? HIGH : LOW));
   mask <<= 1;
   delay(xxx);
}

Of course, you need to adapt this code to the data order expected by your chipset (this example is LSB first).