Tranfering float via SPI beween two arduinos

Thanks for the help John!

I figured out what I was doing wrong. I had a problem with my switchcase statement in my slave code.

I am posting my final code below.

Master Code:

#include <SPI.h>

void setup (void)
{
pinMode(MOSI, OUTPUT);
pinMode(MISO, INPUT);
pinMode(SCK, OUTPUT);
pinMode(SS, OUTPUT);

Serial.begin (115200);
Serial.println ();

digitalWrite(SS, HIGH);

SPI.begin ();

SPI.setClockDivider(SPI_CLOCK_DIV8);
}

byte transferAndWait (const byte what)
{
byte a = SPI.transfer (what);
delayMicroseconds (10);
return a;
}

union first_union{
float f;
byte b[4];}
data;

void loop (void)
{

digitalWrite(SS, LOW);

transferAndWait ('a');

data.b[0] = transferAndWait ('b');
data.b[1] = transferAndWait ('c');
data.b[2] = transferAndWait ('d');
data.b[3] = transferAndWait (0);

digitalWrite(SS, HIGH);

Serial.print("data.f = ");Serial.println(data.f);

Serial.print("data.b[0] = ");Serial.println(data.b[0]);
Serial.print("data.b[1] = ");Serial.println(data.b[1]);
Serial.print("data.b[2] = ");Serial.println(data.b[2]);
Serial.print("data.b[3] = ");Serial.println(data.b[3]);

delay(1000);
}

Slave Code:

byte command = 0;

void setup (void)
{
pinMode(MOSI, INPUT);
pinMode(SCK, INPUT);
pinMode(SS, INPUT);

pinMode(MISO, OUTPUT);

// turn on SPI in slave mode
SPCR |= _BV(SPE);

// turn on interrupts
SPCR |= _BV(SPIE);

} // end of setup

// SPI interrupt routine
ISR (SPI_STC_vect)
{
union first_union{
float f;
byte b[4];}
data;

byte c = SPDR;

data.f = 3.14;

command = c;

switch (command)
{
// no command? then this is the command
case 0:

SPDR = 0;
break;

// incoming byte, return byte result
case 'a':

SPDR = data.b[0];
break;

// incoming byte, return byte result
case 'b':

SPDR = data.b[1];
break;

// incoming byte, return byte result
case 'c':

SPDR = data.b[2];
break;

// incoming byte, return byte result
case 'd':

SPDR = data.b[3];
break;

} // end of switch

} // end of interrupt service routine (ISR) SPI_STC_vect

void loop (void)
{

// if SPI not active, clear current command
if (digitalRead (SS) == HIGH)
command = 0;
}