Bonjour à toutes et à tous,
Je suis en terminal STI2D option SIN et pour mon projet je dois transmettre en liaison série, grâce au Xbee des positions pour 2 servomoteurs. J'envois des trames ressemblant à ça:
47,84
Le problème et qu'au bout de quelques envois, la réception sature. Je m'explique, la seconde carte Arduino reçois bien les données mais les traites pas tout de suite mais rien de mieux qu'une petite vidéo pour la démonstration ;): https://youtu.be/eynlsk4EsMs
Le code de réception:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(3, 2);
int i;
int octetRecep;
char caractere;
void setup()
{
Serial.begin(115200);
mySerial.begin(115200);
}
void loop()
{
String Chaine = "";
i =0;
while (mySerial.available() > 0){ // Attendre de recevoir des caracteres
i++;
octetRecep = mySerial.read(); // Lire les caracteres recus et les stocker dans c
caractere = char(octetRecep);
Chaine=Chaine+caractere;
if(i==5){
break;
}
}
if(Chaine != ""){
Serial.println(Chaine);
}
}
J'envois seulement 5 octets, d'où ce bout de code.
Cordialement
bonjour,
si tu n'envoie que 5 octets d'un coté, pourquoi mettre une limite de l'autre coté?
mets un serial print dans ton while pour voir ce que tu recois.
On va essayer de mettre le print et je vous tiens au courant. Mais je ne pense pas que c'est à cause de la condition qu'il y a une surcharge, non?
Cordialement,
115200 c'est un peu rapide pour sofwareSerial.
Vous pourriez peut-être baisser la vitesse ou alors pourquoi ne pas utiliser l'UART matérielle pour la liaison Xbee si le débit doit être élevé et la liaison softwareSerial pour le debug?
Je vais essayer, mais apparemment se serait les Xbee qui se serait comme ça, car mon professeur à déjà rencontré ce problème, mais ne sais pas encore comment le résoudre, si quelqu'un à une solution?
Bonjour,
J'ai essayer de faire un flush() mais rien ne marche, je pense que c'est le buffer du Xbee qui est surchargé, est-ce qu'il y a une solution pour le vider après chaque réception de donné?
il y a bien deux xbee?
un pour la transmission et l'autre la réception.
baisse les deux à 4800
en fait, il n'a pas le temps de transmettre son buffer à l'arduino et vu qu'il recoit encore des datas, il bug via un overflow du buffer.
tant qu'il ne l'a pas vidé, il bloque toute réception.