Код надо размещать используя соответствующий тэг
Здравствуйте, пытаюсь реализовать двухстороннее общение между двумя ардуино нано по ком портам, на основе этого примера https://alexgyver.ru/gyverbus/.
Если реализовывать отправку данных только в одну сторону, то все работает нормально. А если добавлять второй последовательный порт, и как бы "дозеркалить" части программ, то мигает один светодиод на одной из плат, либо вообще ни один не мигает. Укажите на ошибку. Если прошивки перекидывать местами, то мигающий светодиод меняется, получается дело в самом коде. Код на обоих ардуинках :
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 9); // RX, TX
SoftwareSerial ySerial(8, 7);
struct BACK {
int stoP;
int Run;
};
struct go {
int stoP2;
\
};
go ignal;
unsigned long time = 0;
BACK Signal;
void setup() {
mySerial.begin(19200);
pinMode(5,OUTPUT);
pinMode(4,INPUT);
ySerial.begin(9600);
}
void loop() {
if (mySerial.readBytes((byte*)&Signal, sizeof(Signal))) {
Serial.println(Signal.stoP);
if ( Signal.stoP ==1 )
{digitalWrite(5,1);}
else
{digitalWrite(5,0);
}
}
ignal.stoP2= digitalRead(4);
if(millis() - time > 4000) {
ySerial.write((byte*)&ignal, sizeof(ignal));
time=millis();
}
}
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 9);
SoftwareSerial ySerial(8, 7);
struct BACK {
int stoP;
int Run;
};
BACK Signal;
struct go {
int stoP2;
};
go ignal;
unsigned long time=0;
void setup() {
// put your setup code here, to run once:
mySerial.begin(19200);
pinMode(4,INPUT);
ySerial.begin(9600);
pinMode(5,OUTPUT);
}
void loop() {
Signal.stoP= digitalRead(4);
if(millis() - time > 4000) {
mySerial.write((byte*)&Signal, sizeof(Signal));
time=millis();
Serial.println(Signal.stoP);}
if (ySerial.readBytes((byte*)&ignal, sizeof(ignal))) {
;
if ( ignal.stoP2 ==1 )
{digitalWrite(5,1);}
else
{digitalWrite(5,0);
}
}}
Если реализовывать отправку данных только в одну сторону, то все работает нормально. А если добавлять второй последовательный порт, и как бы "дозеркалить" части программ, то мигает один светодиод на одной из плат, либо вообще ни один не мигает. Укажите на ошибку. Если прошивки перекидывать местами, то мигающий светодиод меняется, получается дело в самом коде. Код на обоих ардуинках :
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 9); // RX, TX
SoftwareSerial ySerial(8, 7);
struct BACK {
int stoP;
int Run;
};
struct go {
int stoP2;
\
};
go ignal;
unsigned long time = 0;
BACK Signal;
void setup() {
mySerial.begin(19200);
pinMode(5,OUTPUT);
pinMode(4,INPUT);
ySerial.begin(9600);
}
void loop() {
if (mySerial.readBytes((byte*)&Signal, sizeof(Signal))) {
Serial.println(Signal.stoP);
if ( Signal.stoP ==1 )
{digitalWrite(5,1);}
else
{digitalWrite(5,0);
}
}
ignal.stoP2= digitalRead(4);
if(millis() - time > 4000) {
ySerial.write((byte*)&ignal, sizeof(ignal));
time=millis();
}
}
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 9);
SoftwareSerial ySerial(8, 7);
struct BACK {
int stoP;
int Run;
};
BACK Signal;
struct go {
int stoP2;
};
go ignal;
unsigned long time=0;
void setup() {
// put your setup code here, to run once:
mySerial.begin(19200);
pinMode(4,INPUT);
ySerial.begin(9600);
pinMode(5,OUTPUT);
}
void loop() {
Signal.stoP= digitalRead(4);
if(millis() - time > 4000) {
mySerial.write((byte*)&Signal, sizeof(Signal));
time=millis();
Serial.println(Signal.stoP);}
if (ySerial.readBytes((byte*)&ignal, sizeof(ignal))) {
;
if ( ignal.stoP2 ==1 )
{digitalWrite(5,1);}
else
{digitalWrite(5,0);
}
}}