I've got two Arduinos, one a master and another a slave. I'm trying to send a number, inputted from the serial monitor slave side and displayed on the masters serial monitor. Obviously a slave cannot initiate a transmission however the slave can send a signal to master to indicate it has data to send. I've wrote the code for the Master and slave side following some examples I've found however I'm getting garbage displayed on the serial monitor.
Master
#include <SPI.h>
#define Slave 9
int i = 0;
byte myData[] = {0x12, 0x34};
int SlaveData;
union
{
int x;
byte rxData[2];
} data;
void setup()
{
Serial.begin(115200);
SPI.begin ();
pinMode (Slave, INPUT);
SPI.setClockDivider(SPI_CLOCK_DIV128); //125 kHz ; difficult at 4 MHz speed
digitalWrite(SS, LOW);
delay(100);
}
void loop()
{
SlaveData = digitalRead(Slave);
if (SlaveData == HIGH);
{
SPI.transfer(myData, sizeof(myData));
data.rxData[0] = myData[1]; //SPI is simultaneous send and receive 1-byte offset
data.rxData[1] = myData[0];
Serial.print("Received data from Slave: ");
Serial.println(data.x, DEC);
Serial.println("=========================================================");
}
}
Slave
#include <SPI.h> //needed just for the symbols: MISO, SS
unsigned short Number; //7F80
volatile bool flag1 = false;
int Slave=9;
int i = 0;
void setup()
{
Serial.begin(115200);
pinMode(Slave, OUTPUT);
digitalWrite(Slave, LOW);
pinMode(MISO, OUTPUT);
pinMode(SS, INPUT_PULLUP);
SPCR |= _BV(SPE);
bitClear(SPCR, 4); //SPI slave
SPCR |= _BV(SPIE);
}
void loop()
{
Serial.println("Number?");
while(!Serial.available() >0){}
Number = Serial.parseInt();
if (Number > 0){
byte myData[] =
{
lowByte(Number), highByte(Number)
};
digitalWrite(Slave, HIGH);
if (flag1 == false)
{
;
}
else
{
SPDR = myData[i];//highByte(distancePrimaryCM);
flag1 = false;
i++;
if ( i == 2)
{
i = 0;
}
}
digitalWrite(Slave,LOW);
}
}
ISR(SPI_STC_vect)
{
flag1 = true;
}
Here is what I get from the serial monitor on the master side, constantly.
Received data from Slave: 13330
=========================================================
Received data from Slave: 4660
=========================================================
Received data from Slave: 4626
=========================================================
Received data from Slave: 13330
=========================================================
Received data from Slave: 4660
=========================================================
Received data from Slave: 4626
=========================================================
Received data from Slave: 13330
=========================================================


