Problème surcharge de liaison série

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);
}
  
    
}

Un grand merci d'avance,

Dans ton code tu écrit :

if(i==5){
break;
}

Cela veux dire que quand i =5, tu sort de la boucle pour recevoir des données.

Tu met i++ dans le while. Donc dès que du envoie des données du augmente i jusqu'à 5 au maximum.

Bonjour,

J'envois seulement 5 octets, d'où ce bout de code.

Cordialement

cochise57:
Bonjour,

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?

Avant la vitesse été de 9600 puis on à augmenté au fur et à mesure jusqu'à 11500. Qu'est-ce que l'UART?

On vient de tester avec le logiciel X-CTU et quand le Xbee receveur reçois les données bug au bout de 45 octets.

rajoute un Serial.flush(); pour vider le buffer

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.

hello
tu as bien viré

if(i==5){
break;

cela te permettra de vider ton buffer. a toi de faire le tri dans "chaine " ensuite

Ok je vais essayer de suite de les baisser, en espèrent que ça règle le problème...

infobarquee:
rajoute un Serial.flush(); pour vider le buffer

Il me semble que Serial.flush ne vide plus le buffer:

arduinoplayground:
Description

Waits for the transmission of outgoing serial data to complete. (Prior to Arduino 1.0, this instead removed any buffered incoming serial data.)

Pas d'autre solution?

Pas d'autre solution?