Esp32 Délais entre réception et émission sérial

Bonjour à tous,
Je n'y comprend RIEN !
Sur un ESP32 cadencé à 80Mhz j'utilise Hardware Serial sur Serial1 et 2 pour recevoir un message de 19 char (y compris /r/n) sur Serial2.
Je répond IMMEDIATEMENT sur serial1 en envoyant un message de même taille
Je constate au scope que ma réponse part ~3-4 secondes après la fin de réception du message reçu.
Pourquoi ce délais et que manque t-il à mon code pour raccourcir le temps entre fin de réception et émission.
J'ai en fait utilisé une voie en réception et l'autre en émission pour justement raccourcir le temps de réponse.

/*
emulation lidar ESP32 RX2 TX1
voie 1 sport1 tx 27; rx 26 nu=non utilisé
voie 2 sport2 rx 17; tx 16 nu=non utilisé
*/


String buf1;
char rmessageL[] =   {"~0103010006B9624\r\n"};    //message reponse LECTURE
String bufrec;
#include <HardwareSerial.h>

HardwareSerial sport1(1); // use UART1
HardwareSerial sport2(2); // use UART2

void setup() {
  Serial.begin(115200);
  sport1.begin(115200, SERIAL_8N1, 26, 27); //RX, TX
  sport2.begin(115200, SERIAL_8N1, 17, 16); //RX, TX
    while (!Serial) {
   Serial.println("attente Serial  ") ; // attente port connect
  }
  while (!sport1) {
  Serial.println("attente sport1  ")   ; // attente port connect.
  }
  while (!sport2) {
  Serial.println("attente sport2  ")   ; // attente port connect
  }  
int buf1_len = buf1.length() + 1; //buffer de reception
  }
  void loop() 
{
    if (sport2.available())
    {
     buf1 = (sport2.readString()); //reception message dans buf1 
    }  
    else
    {
      return;
    }
    delay(50);    
    sport1.write (rmessageL, sizeof(rmessageL));   //ENVOI lecture distance
    delay(100);
  }

Il faut mettre ton code entre balise < code/> pour que celui-ci soit lisible par tout un chacun

Je pensais l'avoir fait, milles excuses !

Oui tu avais utilisé [code] au lieu de < code/> :slight_smile:

Bonsoir terwal

Ses balises sont justes, c'est l'apostrophes avant
image
et après
image
qui posent problème.

Cordialement
jpbbricole

Bonsoir JOE56670

Tu lis:

buf1 = (sport2.readString());

sans caractère de terminaison donc c'est le timout du serial qui termine la lecture, je ne sait plus le temps par défaut du timout :woozy_face:
Il te faut mettre un sport2.setTimeout(100), dans setup.
ou lis ton port avec sport2.readStringUntil('\n') et envoies ton message sans le \r.

Cordialement
jpbbricole

Ce n'est pas le contraire ?
quand tu clique sur le bouton cela ne rajoute pas justement les ' autour du texte sélectionné?

Bonsoir terwal

Oui, en fait, si tu cliques sur l'icône des balises pour mettre du code, c'est ce qui met les apostrophes donc il ne faut pas mettre les balises [CODE] et [/CODE]

Cordialement
jpbbricole

Un grand merci, ça marche !!!

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