Hi,
I need to communicate more than 2 Arduinos with SPI.
I connected them this way:

I wrote the following code for receive double on master:
#include <SPI.h>
const int SS1 = 8;
const int SS2 = 9;
double valor;
byte* pvalor;
byte slave = 0;
void setup() {
// set the SS1 as an output:
pinMode (SS1, OUTPUT);
pinMode (SS2, OUTPUT);
// Begin sending data to Slave 1
digitalWrite(SS1,LOW);
digitalWrite(SS2,HIGH);
// initialize SPI:
SPI.begin();
Serial.begin (57600); // debugging
pvalor = (byte *) &valor;
}
void loop() {
SPI.transfer(0x0F);
for (int i = 0; i < 4; i++) {
pvalor[i] = SPI.transfer(i);
delay(100);
}
delay(500);
Serial.println(valor);
i++;
if ((i % 10) == 0) {
slave = (slave + 1) % 2;
switch (slave) {
case 0:
digitalWrite(SS2,HIGH);
delay(1000);
digitalWrite(SS1,LOW);
break;
case 1:
digitalWrite(SS1,HIGH);
delay(1000);
digitalWrite(SS2,LOW);
break;
}
}
}
and for slaves:
#include <SPI.h>
// Definition of interrupt names
#include < avr/io.h >
#include < avr/interrupt.h >
int sensePin = 2;
double valor = 5000;
byte* pvalor;
boolean interrupt = false;
int led = 9;
void setup (void)
{
Serial.begin (57600); // debugging
// read from the sense pin
pinMode(sensePin, INPUT);
// have to send on master in, *slave out*
pinMode(MISO, OUTPUT);
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
pvalor = (byte *) &valor;
} // end of setup
// SPI interrupt routine
ISR (SPI_STC_vect)
{
byte c = SPDR; // grab byte from SPI Data Register
Serial.print(c);
Serial.print(" ");
switch (c) {
case 0x0F:
valor = valor + 1.12;
SPDR = pvalor[0];
break;
case 0:
SPDR = pvalor[1];
break;
case 1:
SPDR = pvalor[2];
break;
case 2:
SPDR = pvalor[3];
break;
}
} // end of interrupt routine SPI_STC_vect
void loop (void)
{
int valor = digitalRead(sensePin);
if ((valor == HIGH) && (interrupt == true)) {
digitalWrite(led, LOW);
SPI.detachInterrupt();
SPI.end();
interrupt = false;
} else if ((valor == LOW) && (interrupt == false)) {
digitalWrite(led, HIGH);
// turn on SPI in slave mode
SPCR |= _BV(SPE);
// now turn on interrupts
SPI.attachInterrupt();
interrupt = true;
}
delay(100);
} // end of loop
This works fine for communicating 2 arduinos but, when I connect another arduino the master only receive zeros. Anyone know what can be happening?