Esp32 Serial1 buffer

Bonjour à tous et à toutes.
je suis en train d'écrire un code servant à lire ce qui sort d'un radar Doppler, celui-ci est raccorder à Serial1, et je peux lire ce qui en sort quand un véhicule passe devant, jusque là tout va bien. Mais, parce qu'il y a un mais, sinon ce ne serait pas drôle, je peux voir les données s’afficher dans la console uniquement quand Serial1 ne reçoit plus rien, en fait le buffer se rempli et les données s’affichent seulement après et pas de la bonne façon. Voici ce que j'ai dans la console:
S050S050S050S050S050S050S050S050S050S050 et ceci après que Serial1 ne soit plus available. Je voudrais avoir ceci :
*S050
*S050
*S050
*S050
*S050
pendant que Serial1 reçoit quelque chose.
Voici la partie du code qui permet de lire les données du radar:

void loop() {
  if (Serial1.available() > 0){
    String str = Serial1.readString();
    Serial.println(str);
  }
}

J'aimerai que les données n'aillent pas dans le buffer pour être affichées d'un seul bloc, mais en continue tant que Serial1 reçoit celle-ci.
Si vous avez des idées pour m’aiguiller, ce serait génial, merci d'avance.

Bonjour d_r_elec

Ce que tu reçois du Doppler n'est pas terminé par un caractère comme \n par exemple?

S'il, y a un caractère de terminaison, lis ton port série ainsi:
String str = Serial1.readStringUntil('\n');
\n peut être aussi \r.

S'il n'y a pas de caractère de terminaison, il faut initialiser ton port série ainsi:
Serial1.setTimeout(50);
et ne change rien à ta lecture du port série.

Cordialement
jpbbricole

ReadString est bloquant jusqu’à un timeout qui par défaut est d’une seconde sans réception

Si le code peut se permettre d’être bloqué pendant toute la réception d’un message sans rien faire d’autre alors c’est envisageable (en réglant le timeout comme proposé par @jpbbricole a une durée compatible avec le débit en bauds et le temps min entre deux trames)

Si le code ne peut pas se permettre d’être bloqué parce que vous faites autre chose en parallèle alors vous pouvez jeter un oeil à mon petit tuto sur le sujet et à la programmation par machine à états (cf mon tuto éventuellement)

Bonjour jpbbricole,
Non il n'y a aucuns caractères de terminaison, de ce fait j'ai placer Serial1.setTimeout(50);dans void setup(), et cela fonctionne parfaitement. merci beaucoup.
Merci a toi aussi J-M-L pour tes explications, c’est top. Pour les deux tutos que tu me propose, je vais y regarder, cela m’intéresse, surtout la programmation par machine à états , c’est un sujet qu'on a déjà aborder ensemble.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.