Here's some code. I took the razor to what you had and removed everything not required to prove the concept. Hopefully I didn't go too far. The master could still be a lot smaller.
Master
//Master sending data
#include <SPI.h>// include the SPI library:
#define SS_PIN 10
int command_array[] = {0x04, 0x06, 0x08, 0x0A};
int returned_data[4];
void setup() {
pinMode (SS_PIN, OUTPUT);// set the spi_data_pin as an output:
Serial.begin(115200);
SPI.begin();
SPI.setDataMode(SPI_MODE2);
SPI.setClockDivider(SPI_CLOCK_DIV64) ;
SPI.setBitOrder(LSBFIRST);
}
void loop() {
digitalWrite(SS_PIN,LOW);
SPI.transfer(command_array[0]); // send command
delay(1); // give the slave some time
returned_data[0] = SPI.transfer(0); // get response
digitalWrite(SS_PIN,HIGH);
digitalWrite(SS_PIN,LOW);
delay(1);
SPI.transfer(command_array[1]);
returned_data[1] = SPI.transfer(0);
digitalWrite(SS_PIN,HIGH);
digitalWrite(SS_PIN,LOW);
delay(1);
SPI.transfer(command_array[2]);
returned_data[2] = SPI.transfer(0);
digitalWrite(SS_PIN,HIGH);
digitalWrite(SS_PIN,LOW);
delay(1);
SPI.transfer(command_array[3]);
returned_data[3] = SPI.transfer(0);
digitalWrite(SS_PIN,HIGH);
Serial.print (returned_data[0]);
Serial.print (',');
Serial.print (returned_data[1]);
Serial.print (',');
Serial.print (returned_data[2]);
Serial.print (',');
Serial.println (returned_data[3]);
}
Slave
byte response_data[] = {-1,-1,-1,-1,'4',-1,'6',-1,'8',-1,'A'};
void setup (void) {
pinMode(MISO, OUTPUT); // have to send on master in, *slave out*
SPCR |= _BV(SPE); // turn on SPI in slave mode
SPCR |= _BV(SPIE); // turn on interrupts
}
void loop () {}
ISR (SPI_STC_vect) {
byte command = SPDR;
SPDR = response_data[command];
}
See if that does anything useful.
Rob