salut à tous,
j'ai un petit soucis pour communiquer avec 2 carte arduino. sur le simulateur tinkercad j'arrive bien à envoyer et recevoir des caractères sur la carte esclave mais j'ai il me semble un soucis de rafraichissement des données car quand je veux envoyer un autre caractère après un autre, j'ai toujours l'autre caractère qui s'envoie de temps à autre.
j'utilise le myserial.write
voici mon problème je veux "simuler" un un de chantier (rouge vert) avec un feu maitre :
qui envoi un caractère quand il est au rouge donc le feu esclave doit se mettre au vert quand il reçoit se caractère
qui envoi un autre caractère quand il est au vert et le feu esclave doit donc se mettre au rouge : voici les codes utilisés :
// C++ code
// programme maitre
#include <SoftwareSerial.h>
String readString;
SoftwareSerial mySerial(10,11); //rx tx
// déclaration de l'etat des LED
int EtatLedV;
int EtatLedR;
//sortie des LED
int feurouge1 = 8;
int feuvert1 = 7;
void setup()
{
mySerial.begin(9600);
Serial.begin(57600); //vitesse de transmission baud
pinMode(feurouge1 , OUTPUT);
pinMode(feuvert1 , OUTPUT);
Serial.println("demarrage Programme Feu chantier");
//lecture de l'etat des sorties
}
void loop()
{
digitalWrite(feurouge1,HIGH);
digitalWrite(feuvert1,LOW);
for (int i=0; i <= 20; i++)
{
mySerial.write("FFFFFF\n"); //envoi de la chaine de caractère
Serial.println("envoi F");
}
delay(1000);
for (int i=0; i<= 200; i++)
{
mySerial.write("OOOOO\n"); //envoi de la chaine de caractère
Serial.println("envoi O");
}
digitalWrite(feurouge1,LOW);
digitalWrite(feuvert1,HIGH);
delay(1000);
}
// C++ code
// programme esclave
#include <SoftwareSerial.h>
String readString;
SoftwareSerial mySerial(10,11); //rx tx
int feurouge2 = 8;
int feuvert2 = 7;
void setup()
{
mySerial.begin(9600);
Serial.begin(57600); //vitesse de transmission baud
Serial.println("demarrage de Programme");
pinMode(feurouge2 , OUTPUT);
pinMode(feuvert2 , OUTPUT);
}
void loop()
{
while(mySerial.available()){
delay(10);
char c = mySerial.read();
readString += c;
}
Serial.println(readString);
if(readString.indexOf("F")!=-1)
{
digitalWrite(feurouge2,LOW);
digitalWrite(feuvert2,HIGH);
} delay(10);
if(readString.indexOf("O")!=-1)
{
digitalWrite(feurouge2,HIGH);
digitalWrite(feuvert2,LOW);
} delay(10);
}