Hi, i'm new to programming with SPI. I red a lot about it and want to give it a try. So here is the setup; 2 rgb leds, each led is connected to an arduino (blue - pin 7 / green - pin 6 / red - pin 5), arduino's are connected trough spi with each other. Goal i try to archive; first the blue led goes on of one arduino for 1 second, then the blue led goes off and the other blue led is turned on for 1 second, blue led goes off and the green led is turned on for 1 second on the first arduino, led is turned of and green led of second arduino is turned on for one second, and so on. This is my code but don't understand why it doesn't work. The blue colors are OK but then they start to blink together sometimes and the flow of the program isn't right. Thanks in advance!
master:
#include <SPI.h>;
byte Mastersend, Mastereceive, MastereceiveOld;
int counter;
void setup (void) {
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
Serial.begin(115200); //set baud rate to 115200 for usart
digitalWrite(SS, HIGH); // disable Slave Select
SPI.begin ();
SPI.setClockDivider(SPI_CLOCK_DIV4);//divide the clock by 8
MastereceiveOld = 256;
}
void loop (void) {
digitalWrite(SS, LOW); // enable Slave Select
Serial.println(Mastereceive);
if (Mastereceive == 0) {
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
} else if (Mastereceive == 2) {
digitalWrite(6, HIGH);
digitalWrite(5, LOW);
digitalWrite(7, LOW);
} else if (Mastereceive == 4) {
digitalWrite(5, HIGH);
digitalWrite(7, LOW);
digitalWrite(6, LOW);
} else {
digitalWrite(5, LOW);
digitalWrite(7, LOW);
digitalWrite(6, LOW);
}
delay(1000);
if (Mastereceive != MastereceiveOld) {
Mastersend = counter++;
MastereceiveOld = Mastersend;
}
Serial.println(Mastersend);
Mastereceive = SPI.transfer(Mastersend);
counter = Mastereceive;
digitalWrite(SS, HIGH); // disable Slave Select
delay(1000);
}
slave:
#include <SPI.h>
char buff [50];
volatile byte indx;
volatile boolean process;
volatile byte Slavereceived,Slavesend,SlavereceiveOld;
void setup (void) {
pinMode(7,OUTPUT); //Sets pin 2 as input
pinMode(6,OUTPUT); //Sets pin 7 as Output
pinMode(5,OUTPUT); //Sets pin 7 as Output
Serial.begin (1000000);
pinMode(MISO, OUTPUT); // have to send on master in so it set as output
SPCR |= _BV(SPE); // turn on SPI in slave mode
indx = 0; // buffer empty
process = false;
SPI.attachInterrupt(); // turn on interrupt
SlavereceiveOld = 255;
}
ISR (SPI_STC_vect){ // SPI interrupt routine {
byte Slavereceived = SPDR;
}
void loop (void) {
if(Slavereceived == 1) {
digitalWrite(7,HIGH);
digitalWrite(6,LOW);
digitalWrite(5,LOW);
} else if (Slavereceived == 3) {
digitalWrite(6,HIGH);
digitalWrite(5,LOW);
digitalWrite(7,LOW);
} else if (Slavereceived == 5) {
digitalWrite(5,HIGH);
digitalWrite(7,LOW);
digitalWrite(6,LOW);
Slavereceived = 0;
} else {
digitalWrite(5,LOW);
digitalWrite(7,LOW);
digitalWrite(6,LOW);
}
delay(1000);
if (Slavereceived != SlavereceiveOld) {
Slavesend = Slavereceived++;
SlavereceiveOld = Slavesend;
}
SPDR = Slavesend;
}