Bonjour à tous,
J'ai phénomène qui n'est pas banal.
J'alimente en donnée un arduino via la librairie softserial.
Si je règle la vitesse à 9600 baud, le programme marche à peu prés bien, je manque un peu de vitesse sur ma com.
Si je passe ma vitesse à 57600 baud, le programme ne fonctionne plus, en surveillant sur le moniteur série serial et non softserial, je vois bien mes données arrivé propre, mais le programme ne veut pas s’exécuter.
Auriez vous une idée de ce qu'il se passe.
// serie_com_cockpit.ino
#include <SoftwareSerial.h>
#define RX 9
#define TX 8
#define ESCLAVE 7
#define PRIO 6
boolean PRIOINPUT=true;
#define TRAIN_ARG_D 2
#define TRAIN_ARG_U 3
#define TRAIN_ARD_U 5
#define TRAIN_ARD_D 4
#define TRAIN_AV_U 12
#define TRAIN_AV_D 11
SoftwareSerial portOne(RX,TX);
int Buffer_size;
String data2;
char buf [100];//tampon de réception
volatile byte pos;//position dans le tampon
volatile boolean process_it;//information récupérée
void setup()
{
pinMode(PRIO, INPUT);
pinMode(ESCLAVE, INPUT);
pinMode(TRAIN_ARG_D, OUTPUT);
pinMode(TRAIN_ARG_U, OUTPUT);
pinMode(TRAIN_ARD_D, OUTPUT);
pinMode(TRAIN_ARD_U, OUTPUT);
pinMode(TRAIN_AV_D, OUTPUT);
pinMode(TRAIN_AV_U, OUTPUT);
Serial.begin(115200);
portOne.begin(57600);
}
boolean DATA_test(String Buffer)
{
int size_buffer=Buffer.length();
int size_req=(Buffer.substring(0,3)).toInt();
if(size_buffer==(size_req+2)){return true;}
else{return false;}
}
void loop (void)
{
if(PRIOINPUT){pinMode(PRIO, INPUT);}
else{pinMode(PRIO, OUTPUT);}
if ((digitalRead(ESCLAVE)==HIGH) and (digitalRead(PRIO)==HIGH))
{
while (portOne.available())
{
// get the new byte:
char inChar = (char)portOne.read();
byte c = inChar;
if (pos < sizeof (buf))
{
buf [pos++] = c;
if (c == '\n')
process_it = true;
}
}
}
else
{
}
if (process_it)
{
buf [pos] = 0;
pos = 0;
String Buffer = buf;
Serial.println(Buffer);
data2=Buffer.substring(7,(Buffer.length())-2);
if(DATA_test(Buffer))
{
if(Buffer.substring(3,7)=="0005")
{
if(data2.toInt()<5)
{
digitalWrite(TRAIN_AV_D,LOW);
digitalWrite(TRAIN_AV_U,HIGH);
}
else if(data2.toInt()>95)
{
digitalWrite(TRAIN_AV_D,HIGH);
digitalWrite(TRAIN_AV_U,LOW);
}
else if ((data2.toInt()<95) and (data2.toInt()>5)){
digitalWrite(TRAIN_AV_D,HIGH);
digitalWrite(TRAIN_AV_U,HIGH);
delay(500);
}
}
if(Buffer.substring(3,7)=="0006")
{
if(data2.toInt()<5)
{
digitalWrite(TRAIN_ARG_D,LOW);
digitalWrite(TRAIN_ARG_U,HIGH);
}
else if(data2.toInt()>95)
{
digitalWrite(TRAIN_ARG_D,HIGH);
digitalWrite(TRAIN_ARG_U,LOW);
}
else if ((data2.toInt()<95) and (data2.toInt()>5)){
digitalWrite(TRAIN_ARG_D,HIGH);
digitalWrite(TRAIN_ARG_U,HIGH);
}
}
if(Buffer.substring(3,7)=="0007")
{
if(data2.toInt()<5)
{
digitalWrite(TRAIN_ARD_D,LOW);
digitalWrite(TRAIN_ARD_U,HIGH);
}
else if(data2.toInt()>95)
{
digitalWrite(TRAIN_ARD_D,HIGH);
digitalWrite(TRAIN_ARD_U,LOW);
}
else if ((data2.toInt()<95) and (data2.toInt()>5)){
digitalWrite(TRAIN_ARD_D,HIGH);
digitalWrite(TRAIN_ARD_U,HIGH);
}
}
}
String role;
role=Buffer.substring(0,2);
}
process_it = false;
}
Autre petit question sur la communication sérial de base, il existe void serialEvent() , mais pour le soft serial, je n'arrive pas à le faire, es ce normal, es ce possible sur des "faux" port série?
Merci d'avance pour votre aide.
Flo