It is kind of working. It isI am not sure how to explain it, I'll just showing the first character of the master Arduino's and the slave doesn't display any information at all..show it below.
SlaveMaster: hey
MasterSlave: hi
MasterSlave: h
MasterSlave: h
Master: hhey
MasterSlave: hy
MasterSlave: h
MasterSlave: h
.
.
.
Slave: i
Slave:
Slave:
.
.
And the slave doesn't display anythingdisplays only itself:
Slave: hi
I have created for loops to transfer every char of the string seperatly and respectively but this is still the case. I couldn't find any sample code online for independent string transfering via SPI. What could I be doing wrongknow I probably have many mistakes but how can I fix them to work just as I intend to?
Arduino1.pin10 --- Arduino2.pin10
Master Code
//MASTER
#include<SPI.h>
String textSend="", textReceive="";
void setup(){
Serial.begin(115200);
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV8); //Sets clock for SPI communication at 8 (16/8=2Mhz)
digitalWrite(SS,LOW);
}
void loop(){
textSend=""; textReceive="";
textSend = Serial.readString();
if(textSend != ""){
for(int i = 0; i < textSend.length(); i++){
delayMicroseconds (20);
SPI.transfer(textSend[i]);
}
Serial.print ("PC1: ");
Serial.println (textSend);
}else{
int i = 0;
char c;
do{
delayMicroseconds (20);
c = SPI.transfer(1);
textReceive += c;
i++;
}while(textReceive[i] != 0);
if(textReceive[i] == 0){
Serial.print ("PC2: ");
Serial.println (textReceive);
textReceive = "";
}
}
}
Slave Code
//SLAVE
#include<SPI.h>
String textSend="";
String textReceive="";
void setup (void){
Serial.begin(115200);
pinMode(MISO, OUTPUT);
SPCR |= _BV(SPE);
SPCR |= _BV(SPIE);
SPI.attachInterrupt();
}
ISR (SPI_STC_vect){ //Interrupt Service Routine
byte c = SPDR;
if(c != 1){ //Slave receives
for(int i = 0; i < textReceive.length(); i++){
textReceive += SPDR;
}
if(textReceive.length() > 0){
Serial.print("PC1: ");
Serial.println(textReceive);
textReceive = "";
}
}else{
for(int i = 0; i < textSend.length(); i++){
delayMicroseconds(20);
SPDR = textSend[i];
}
if(textSend != ""){
Serial.print("PC2: ");
Serial.println(textSend);
textSend = "";
}
}
}
void loop() {
if(textSend == "")
textSend = Serial.readString();
}