Capteur distance DFROBOT SEN0337 erreur en lecture

Bonjour, j'utilise 2 capteurs de distance branchés en cascade, c'est à dire sur la même liaison série UART avec Arduino UNO.
Attention des capteurs sont livrés avec des câbles multicouleurs où rouge et noir sont inversés
Le problème c'est que j'ai 20% d'erreur quand je reçois les données des capteurs.
J'explique.
le datasheet du capteur
https://files.seeedstudio.com/products/101990702/TOFSense_User_Manual_V2.0_EN.pdf
un autre plus complet
https://www.waveshare.com/wiki/TOF_Laser_Range_Sensor
Sur Serial j'envoie 8 octets au capteur: 0x57 0x10 0xff 0xff 0xid 0xff 0xff 0xsomme
Une partie c'est des nombres fixes, pour le reste il y a l'identifiant du capteur dont je veux la réponse et en dernier c'est l'octet bas de la somme de toutes les données envoyés avant. Cela permet de pouvoir vérifier que les données reçut sont bien celles envoyées.
En retour je doit recevoir 16 octets. Toujours pareil, quelques nombres fixes, puis l'identifiant du capteur qui vient de répondre, la distance lu par le capteur et à la fin l'octet bas de la somme des données envoyées.
J'ai fait un petit programme qui m'affiche les données reçut par l'Arduino.
Dedans je calcule la somme de ce que je reçois et je la compare avec la somme reçus.
J'ai environ 20% d'erreur.
Je voudrais bien corriger ça. On pourrait penser que c'est normal mais alors pourquoi je n'ai jamais d'erreur quand c'est l'Arduino qui envoie des données aux capteurs, j'ai toujours une réponse, sinon au lieu de recevoir 57 10 ff ff .... j'aurais ffff ffff ffff ffff .... résultat que j'obtiens si aucun capteur correspond à l'identifiant envoyé.
J'ai remarqué aussi que dans la différence des sommes, seul un des 2 chiffres de l'octet en hexa est différent, soit les 4 bits bas soit les 4 bits haut de l'octet: 8a-8c ou 8a-ba.
Si quelqu'un a une idée, a plus
Le code

/* lecture de distance avec 2 capteurs DFROBOT SEN0337
   en cascade sur la même liaison série UART 
 */
#include <SoftwareSerial.h>

SoftwareSerial capteur(10, 11);                       // RX, TX

int sommeCalcule,sommeLu,lec,nber1=0,nber2=0,nblec=0;

void setup() 
  {Serial.begin(9600);
   delay(100);
   capteur.begin(115200);
   Serial.println("Apres begin"); 
   Serial.flush();
  }

void loop()                  
  {char str[3];
   sommeCalcule=0;                                    //données à envoyer aux capteurs pour avoir en retour la distance de identifiant=1
   capteur.write(0x57);                                   //header
   capteur.write(0x10);                                   //mark
   capteur.write(0xff);                                   //réservé
   capteur.write(0xff);                                   //réservé
   capteur.write(1);                                      //identifiant du capteur pour lequel on veut la distance
   capteur.write(0xff);                                   //réservé
   capteur.write(0xff);                                   //réservé
   capteur.write(0x57+0x10+0xff+0xff+1+0xff+0xff);        //octet bas de la somme des données envoyées
   capteur.flush();                                   //attendre que tout soit bien envoyé
   delay(20);
  
   for(int x=0; x<15;x++)                             //boucle pour lire 15 octets et en faire la somme  
     {lec=capteur.read();                             //lecture
      sommeCalcule+=lec;                              //ajouter à sommeCalcule
      sprintf(str, "%02x-", lec);
      Serial.print(str);                              //impression à l'écran
      Serial.flush();                                 //attendre que tout soit bien envoyé
      delay(10);                                      //petit delai suplémentaire pour que la prochaine donnée soit bien arrivé
     }
   sommeLu=capteur.read();                            //lecture de la somme reçus
   sprintf(str, "%02x/", sommeLu);
   Serial.print(str);                                 //impression à l'écran
   sommeCalcule=sommeCalcule&0x00ff;
   sprintf(str, "%02x", sommeCalcule);
   Serial.print(str);                                 //impression à l'écran
   if((sommeCalcule&0x00ff)==sommeLu)                 //si octet bas de sommeCalcule = octet sommeLu
     Serial.println();                                //passer à la ligne suivante
   else                                               //sinon
     {nber1++;                                        //augmenter le nombre d'erreur de capteur 1
      Serial.print(" -------nb erreur c1:");              
      Serial.println(nber1);                          //impression nombre d'erreur capteur 1 à l'écran
     }
   Serial.flush();                                    //attendre que tout soit bien envoyé
   while(capteur.available())                         //tant qu'il y a des données dans le buffer
     {capteur.read();                                 //les lires
      Serial.println("err");                          //imprimer à l'écran qu'il y avait une données supémentaire
      Serial.flush();                                 //attendre que tout soit bien envoyé
     }
   delay(500);
   
   sommeCalcule=0;                                    //on recommence avec capteur 2
   capteur.write(0x57);
   capteur.write(0x10);
   capteur.write(0xff);
   capteur.write(0xff);
   capteur.write(20);
   capteur.write(0xff);
   capteur.write(0xff);
   capteur.write(0x63+20);
   capteur.flush();
   delay(20);
  
   for(int x=0; x<15;x++)
     {lec=capteur.read();
      sommeCalcule+=lec;
      sprintf(str, "%02x-", lec);
      Serial.print(str);
      Serial.flush();
      delay(10);
     }
   sommeLu=capteur.read();
   sprintf(str, "%02x/", sommeLu);
   Serial.print(str);                                 
   sprintf(str, "%02x", (sommeCalcule&0x00ff));
   Serial.print(str);
   if((sommeCalcule&0x00ff)==sommeLu)
     Serial.println();
   else 
     {nber2++;
      Serial.print(" -------nb erreur c2:");
      Serial.println(nber2);
     }
   Serial.flush();
   while(capteur.available())
     {capteur.read();
      Serial.println("err");
      Serial.flush();
     }
   Serial.print("------------nb de lecture:");
   Serial.println(nblec++);                                   //augmenter le nombre de lecture de distance et l'afficher à l'écran
   Serial.flush();
   delay(500);
  }

Les erreurs

Apres begin
57-00-ff-01-9d-7c-4c-00-b7-06-00-04-05-00-ff-81/81
57-00-ff-14-07-83-49-00-cf-06-00-04-05-00-ff-1a/1a
------------nb de lecture:0
57-00-ff-01-dd-81-4c-00-b2-06-00-04-05-00-ff-51/c1 -------nb erreur c1:1
57-00-ff-14-d0-87-49-00-c7-06-00-04-05-00-ff-df/df
------------nb de lecture:1
57-00-ff-01-04-86-4c-00-65-06-00-04-05-00-ff-f0/a0 -------nb erreur c1:2
57-00-ff-14-98-8c-49-00-d1-06-00-04-04-00-ff-b5/b5
------------nb de lecture:2
57-00-ff-01-d1-8a-4c-00-b2-06-00-04-04-00-ff-bd/bd
57-00-ff-14-27-91-49-00-d6-06-00-04-04-00-ff-4e/4e
------------nb de lecture:3
57-00-ff-01-69-8f-4c-00-b2-06-00-04-05-00-ff-5b/5b
57-00-ff-14-b5-95-49-00-d4-06-00-04-05-00-ff-df/df
------------nb de lecture:4
57-00-ff-01-fe-93-4c-00-b3-06-00-04-05-00-ff-f5/f5
57-00-ff-14-fd-9a-49-00-c3-06-00-04-05-00-ff-9b/1b -------nb erreur c2:1
------------nb de lecture:5
57-00-ff-01-cb-98-4c-00-b3-06-00-04-05-00-ff-c7/c7
57-00-ff-14-0c-9f-49-00-ce-06-00-04-04-00-ff-39/39

------------nb de lecture:6
57-00-ff-01-63-9d-4c-00-b3-06-00-04-05-00-ff-64/64
57-00-ff-14-d4-a3-49-00-cd-06-00-04-04-00-ff-04/04
------------nb de lecture:7
57-00-ff-01-f7-a1-4c-00-b4-06-00-04-04-00-ff-fd/fc -------nb erreur c1:3
57-00-ff-14-63-a8-49-00-d3-06-00-04-04-00-ff-9e/9e
------------nb de lecture:8
57-00-ff-01-c5-a6-4c-00-b4-06-00-04-05-00-ff-d0/d0
57-00-ff-14-2b-ad-49-00-ce-06-00-04-04-00-ff-66/66
------------nb de lecture:9
57-00-ff-01-5d-5b-4c-00-b2-06-00-04-05-00-ff-6b/1b -------nb erreur c1:4
57-00-ff-14-ba-b1-49-00-c2-06-00-04-04-00-ff-ed/ed
------------nb de lecture:10
57-00-ff-01-f0-af-4c-00-b6-06-00-04-05-00-ff-07/06 -------nb erreur c1:5
57-00-ff-14-83-b6-49-00-ce-06-00-04-05-00-ff-c8/c8
------------nb de lecture:11
57-00-ff-01-81-b4-4c-00-b2-06-00-04-05-00-ff-d8/98 -------nb erreur c1:6
57-00-ff-14-11-bb-49-00-c8-06-00-04-04-00-ff-54/54
------------nb de lecture:12
57-00-ff-01-b8-b9-4c-00-ad-06-00-04-05-00-ff-6f/cf -------nb erreur c1:7
57-00-ff-14-da-bf-49-00-d3-06-00-04-05-00-ff-2d/2d
------------nb de lecture:13
57-00-ff-01-26-be-4c-00-b5-06-00-04-05-00-ff-4a/4a
57-00-ff-14-68-c4-49-00-cb-06-00-04-04-00-ff-b7/b7
------------nb de lecture:14
57-00-ff-01-bc-c2-4c-00-b3-06-00-04-05-00-ff-e2/e2
57-00-ff-14-31-c9-49-00-d1-06-00-04-04-00-ff-8b/8b
------------nb de lecture:15
57-00-ff-01-53-c7-4c-00-b8-06-00-04-05-00-ff-83/83
57-00-ff-14-bf-cd-49-00-d0-06-00-04-05-00-ff-1d/1d
------------nb de lecture:16
57-00-ff-01-20-cc-4c-00-b6-06-00-04-05-00-ff-53/53
57-00-ff-14-4e-d2-49-00-ce-06-00-04-04-00-ff-ae/ae
------------nb de lecture:17
57-00-ff-01-b6-d0-4c-00-b7-06-00-04-05-00-ff-ee/ee
57-00-ff-14-16-d7-49-00-d9-06-00-04-05-00-ff-87/87
------------nb de lecture:18
57-00-ff-01-4d-d5-4c-00-b7-06-00-04-05-00-ff-8a/8a
57-00-ff-14-a5-db-49-00-cf-06-00-04-04-00-ff-0f/0f
------------nb de lecture:19
57-00-ff-01-e1-d9-4c-00-b2-06-00-04-05-00-ff-1d/1d
57-00-ff-14-33-e0-49-00-d0-06-00-04-04-00-ff-a3/a3
------------nb de lecture:20
57-00-ff-01-b1-de-4c-00-ac-06-00-04-05-00-ff-ec/ec
57-00-ff-14-fc-e4-49-00-d0-06-00-04-04-00-ff-70/70
------------nb de lecture:21
57-00-ff-01-49-e3-4c-00-b5-06-00-04-05-00-ff-92/92
57-00-ff-14-8a-e9-49-00-cb-06-00-04-04-00-ff-fe/fe
------------nb de lecture:22
57-00-ff-01-dd-e7-4c-00-b2-06-00-04-05-00-ff-27/27
57-00-ff-14-19-ee-49-00-c7-06-00-04-04-00-ff-8e/8e
------------nb de lecture:23
57-00-ff-01-74-ec-4c-00-b8-06-00-04-05-00-ff-c9/c9
57-00-ff-14-e1-f2-49-00-d3-06-00-04-04-00-ff-66/66
------------nb de lecture:24
57-00-ff-01-44-e1-4c-00-b7-06-00-04-04-00-ff-9c/8c -------nb erreur c1:8
57-00-ff-14-df-f7-49-00-d6-06-00-04-05-00-ff-fd/6d -------nb erreur c2:2
------------nb de lecture:25
57-00-ff-01-d9-f5-4c-00-b1-06-00-04-05-00-ff-30/30
57-00-ff-14-67-fc-49-00-cb-06-00-04-04-00-ff-be/ee -------nb erreur c2:3
------------nb de lecture:26
57-00-ff-01-aa-fa-4c-00-b1-06-00-04-04-00-ff-05/05
57-00-ff-14-ff-00-4a-00-d8-06-00-04-04-00-ff-98/98
------------nb de lecture:27
57-00-ff-01-41-ff-4c-00-b5-06-00-04-05-00-ff-a6/a6
57-00-ff-14-8d-05-4a-00-cf-06-00-04-04-00-ff-22/22
------------nb de lecture:28
57-00-ff-01-0e-04-4d-00-b1-06-00-04-05-00-ff-75/75
57-00-ff-14-1b-0a-4a-00-cb-06-00-04-04-00-ff-b1/b1
------------nb de lecture:29
57-00-ff-01-a6-08-4d-00-bb-06-00-04-05-00-ff-1b/1b
57-00-ff-14-e2-0e-4a-00-c8-06-00-04-05-00-ff-7a/7a
------------nb de lecture:30
57-00-ff-01-3c-0d-4d-00-bc-06-00-04-05-00-ff-b7/b7
57-00-ff-14-71-13-4a-00-bf-06-00-04-05-00-ff-05/05
------------nb de lecture:31
57-00-ff-01-cf-11-4d-00-b0-06-00-04-05-00-ff-42/42
15-ff-14-ff-17-4a-00-d3-06-00-04-04-00-ff-aa-ffff/12 -------nb erreur c2:4
------------nb de lecture:32
57-00-ff-01-a0-16-4d-00-bb-06-00-04-04-00-ff-22/22
57-00-ff-14-c7-1c-4a-00-da-06-00-04-05-00-ff-7f/7f
------------nb de lecture:33
57-00-ff-01-36-3b-4d-00-b8-06-00-04-05-00-ff-bb/db -------nb erreur c1:9
57-00-ff-14-8f-21-4a-00-cd-06-00-04-04-00-ff-3e/3e
------------nb de lecture:34
57-00-ff-01-03-20-4d-00-bc-06-00-04-05-00-ff-91/91
57-00-ff-14-1e-26-4a-00-d5-06-00-04-04-00-ff-da/da
------------nb de lecture:35
57-00-ff-01-9b-24-4d-00-b3-06-00-04-05-00-ff-24/24
57-00-ff-14-ad-2a-4a-00-b8-06-00-04-04-00-ff-70/50 -------nb erreur c2:5
------------nb de lecture:36
57-00-ff-01-31-29-4d-00-b6-06-00-04-04-00-ff-c1/c1
57-00-ff-14-75-2f-4a-00-a7-06-00-04-04-00-ff-3c/0c -------nb erreur c2:6
------------nb de lecture:37
57-00-ff-01-ff-2d-4d-00-b4-06-00-04-05-00-ff-92/92
57-00-ff-14-3d-34-4a-00-cd-06-00-04-04-00-ff-ff/ff
------------nb de lecture:38
57-00-ff-01-96-32-4d-00-b0-06-00-04-06-00-ff-2a/2b -------nb erreur c1:10
57-00-ff-14-cc-38-4a-00-cb-06-00-04-04-00-ff-90/90
------------nb de lecture:39
57-00-ff-01-65-67-4d-00-b1-06-00-04-05-00-ff-ff/2f -------nb erreur c1:11
57-00-ff-14-95-3d-4a-00-d9-06-00-04-04-00-ff-6c/6c
------------nb de lecture:40
57-00-ff-01-fa-3b-4d-00-b2-06-00-04-05-00-ff-99/99
57-00-ff-14-23-42-4a-00-d3-06-00-04-04-00-ff-f9/f9
------------nb de lecture:41
57-00-ff-01-cb-40-4d-00-b0-06-00-04-04-00-ff-6c/6c
57-00-ff-14-eb-46-4a-00-d7-06-00-04-04-00-ff-c9/c9
------------nb de lecture:42
57-00-ff-01-60-45-4d-00-b4-06-00-04-05-00-ff-0b/0b
57-00-ff-14-7d-4b-49-00-ce-06-00-04-04-00-ff-57/56 -------nb erreur c2:7
------------nb de lecture:43
57-00-ff-01-f4-49-4d-00-b5-06-00-04-05-00-ff-a4/a4
57-00-ff-14-44-50-4a-00-ce-06-00-04-05-00-ff-24/24
------------nb de lecture:44
57-00-ff-01-c5-4e-4d-00-b6-06-00-04-05-00-ff-7b/7b
57-00-ff-14-d3-54-4a-00-cf-06-00-04-04-00-ff-b7/b7
------------nb de lecture:45
57-00-ff-01-5a-53-4d-00-bb-06-00-04-05-00-ff-1a/1a
57-00-ff-14-62-59-4a-00-d0-06-00-04-04-00-ff-4c/4c
------------nb de lecture:46

57-00-ff-01-ee-57-9d-00-ba-06-00-04-05-00-ff-b1/01 -------nb erreur c1:12
57-00-ff-14-2a-5e-4a-00-d1-06-00-04-06-00-ff-1a/1c -------nb erreur c2:8
------------nb de lecture:47
57-00-ff-01-c0-5c-4d-00-b7-06-00-04-05-00-ff-85/85
57-00-ff-14-f2-62-4a-00-d6-06-00-04-04-00-ff-eb/eb
------------nb de lecture:48
57-00-ff-01-53-c1-4d-00-b9-06-00-04-05-00-ff-1f/7f -------nb erreur c1:13
57-00-ff-14-81-67-4a-00-cb-06-00-04-06-00-ff-74/76 -------nb erreur c2:9
------------nb de lecture:49
57-00-ff-01-23-66-4d-00-b6-06-00-04-05-00-ff-f1/f1
57-00-ff-14-4a-6c-4a-00-d3-06-00-04-04-00-ff-4a/4a
------------nb de lecture:50

la liaison série n'est que point à point, ce n'est pas un bus. il faut 2 ports série, un pour chaque capteur.

SoftwareSerial n'est pas stable à 115200 bauds et vous ne pourrez pas gérer 2 instances qui écoutent en même temps ➜ Un Arduino MEGA pourrait faire cela simplement


:warning: Pourquoi poster dans le bar ?? cf "Les bonnes pratiques du Forum Francophone” ➜ utiliser le petit crayon à droite de votre premier post pour changer la catégorie et remettre ce post dans la catégorie 'Français' simplement

Rubrique changé. Désolé.
Justement les capteurs sont fait pour être sur la même liaison série, et c'est possible de gérer jusqu'à 7 capteurs.
Le pourcentage d'erreur ne me gênes pas plus que ça, ce que je ne comprend pas c'est pourquoi il y a erreur que dans un sens?
Où alors c'est les capteurs qui font une erreur sur la somme.

si c'est un mode UART, vous ne pouvez pas.
ils disent dans la doc:

Support UART, CAN, I/O communication( UART, CAN, I/O shared interface)

je suppose que vous pouvez en avoir plusieurs si vous êtes en mode CAN ou I/O shared interface

Oui, mais uniquement en mode senseur actif.

UART active output mode can only be used under the single module

En mode interrogation on peut mettre plusieurs senseur en cascade

UART inquire output mode can be used during the single module and cascade connection.

Ce qui me chiffonne un peu dans la doc c'est ça:

UART (Two interfaces can be simultaneously as UART interface, electrical level of TTL signal line is 3.3V)

En principe il ne faudrait pas l'interfacer en directe avec une carte fonctionnant en 5V.

Autre chose, pour une liaison fiable, personnellement, j'utiliserait l'UART de l'Arduino pour dialoguer avec les capteurs et un softwareSerial pour le débug. OK, c'est contraignant pour le téléchargement mais cela réduit les risques d'erreur de transmission.

OK j'ai pas lu toute la doc

je suppose qu'on balance alors sur Arduino Tx un message avec l'adresse de celui qu'on veut interroger et seul celui ciblé se met à répondre et que tout cela est protégé comme il faut

Si c'est comme cela qu'il est utilisé, les erreurs proviennent sans doute de la liaison software serial à 115200 bauds. Si c'est configurable à 9600 bauds ce serait sans doute mieux

J'avais vu le 3.3v, mais j'avais rien sous la main, j'ai essayé en direct et ça marche, comme sur le montage en fin de la page https://www.waveshare.com/wiki/TOF_Laser_Range_Sensor.
Je vais essayé avec la liaison série de l'arduino et pour debug j'afficherais sur un écran lcd.
Peut être essayé une autre liaison série que SoftwareSerial.
Ce qui m'étonne c'est qu'il y erreur que dans un sens et erreur que sur une partie de l'octet.

C'est ça, on envoi sur Serial à tout le monde et seulement celui concerné répond.
115200 c'est le minimum programmable pour ces capteurs.

c'est pas top avec SoftwareSerial, vous aurez des déchets.... passez sur un port série matériel...

Petit essai avec une MEGA sur Serial3, bingo pas une seule erreur.
C'est donc SoftwareSerial qui a un petit soucis.
Mais vraiment tout petit, 1 bit sur 16 octet reçus.
Étonnant.

oui SoftwareSerial ne tient pas la route à 115200 s'il y a "trop" de communication ou que vous avez d'autres interruptions dans le système

Comme tu dit, et c'est de là que vient le problème, j'ai bien des interruptions dans le système puisque j'utilise Serial.
Ces capteurs reste quand même bien utilisable avec une UNO à condition de surveiller les données reçus, ce qu'il faut quand même faire aussi avec la MEGA.
Blème résolu.

Je viens de modifier le programme en ne mélangeant pas Serial et SoftwareSerial dans la même boucle, d'abord je lis toutes les données sur SoftwareSerial que je stocke en mémoire puis après je les affiche avec Serial, toujours le même pourcentage d'erreur.
Dommage.

je n'avais pas regardé le code mais vous ne lisez pas vraiment bien le port série

repostez le code juste pour s'assurer que ce n'est pas resté en l'état

Voila le code, j'ai fait le changement uniquement pour le capteur 1, pour comparer avec le capteur2

/* lecture de distance avec 2 capteurs DFROBOT SEN0337
   en cascade sur la même liaison série UART 
 */
#include <SoftwareSerial.h>

SoftwareSerial capteur(10, 11);                       // RX, TX

int sommeCalcule,sommeLu,lec,nber1=0,nber2=0,nblec=0;
int tab[16];
void setup() 
  {Serial.begin(9600);
   delay(100);
   capteur.begin(115200);
   Serial.println("Apres begin"); 
   Serial.flush();
  }

void loop()                  
  {char str[3];
   sommeCalcule=0;                                    //données à envoyer aux capteurs pour avoir en retour la distance de identifiant=1
   capteur.write(0x57);                                   //header
   capteur.write(0x10);                                   //mark
   capteur.write(0xff);                                   //réservé
   capteur.write(0xff);                                   //réservé
   capteur.write(1);                                      //identifiant du capteur pour lequel on veut la distance
   capteur.write(0xff);                                   //réservé
   capteur.write(0xff);                                   //réservé
   capteur.write(0x57+0x10+0xff+0xff+1+0xff+0xff);        //octet bas de la somme des données envoyées
   capteur.flush();                                   //attendre que tout soit bien envoyé
   delay(20);
  
  for(int x=0; x<16;x++)                             //boucle pour lire 16 octets  
     {tab[x]=capteur.read();                          //lecture
      delay(50);
     }
   delay(50);
   for(int x=0;x<15;x++)                           //boucle pour faire la somme des données reçu 
     {sommeCalcule+=tab[x];                              //ajouter à sommeCalcule
      sprintf(str, "%02x-", tab[x]);
      Serial.print(str);                              //impression à l'écran
     }
   sprintf(str, "%02x/", tab[15]);
   Serial.print(str);                                 //impression à l'écran
   sommeCalcule=sommeCalcule&0x00ff;
   sprintf(str, "%02x", sommeCalcule);
   Serial.print(str);                                 //impression à l'écran
   if((sommeCalcule&0x00ff)==tab[15])                 //si octet bas de sommeCalcule = octet sommeLu
     Serial.println();                                //passer à la ligne suivante
   else                                               //sinon
     {nber1++;                                        //augmenter le nombre d'erreur de capteur 1
      Serial.print(" -------nb erreur c1:");              
      Serial.println(nber1);                          //impression nombre d'erreur capteur 1 à l'écran
     }
   Serial.flush();                                    //attendre que tout soit bien envoyé
   while(capteur.available())                         //tant qu'il y a des données dans le buffer
     {capteur.read();                                 //les lires
      Serial.println("err");                          //imprimer à l'écran qu'il y avait une données supémentaire
      Serial.flush();                                 //attendre que tout soit bien envoyé
     }
   delay(100);
   
   sommeCalcule=0;                                    //on recommence avec capteur 2
   capteur.write(0x57);
   capteur.write(0x10);
   capteur.write(0xff);
   capteur.write(0xff);
   capteur.write(2);
   capteur.write(0xff);
   capteur.write(0xff);
   capteur.write(0x63+2);
   capteur.flush();
   delay(20);
  
   for(int x=0; x<15;x++)
     {lec=capteur.read();
      sommeCalcule+=lec;
      sprintf(str, "%02x-", lec);
      Serial.print(str);
      Serial.flush();
      delay(20);
     }
   sommeLu=capteur.read();
   sprintf(str, "%02x/", sommeLu);
   Serial.print(str);                                 
   sprintf(str, "%02x", (sommeCalcule&0x00ff));
   Serial.print(str);
   if((sommeCalcule&0x00ff)==sommeLu)
     Serial.println();
   else 
     {nber2++;
      Serial.print(" -------nb erreur c2:");
      Serial.println(nber2);
     }
   Serial.flush();
   while(capteur.available())
     {capteur.read();
      Serial.println("err");
      Serial.flush();
     }
   Serial.print("------------nb de lecture:");
   Serial.println(nblec++);                                   //augmenter le nombre de lecture de distance et l'afficher à l'écran
   Serial.flush();
   delay(100);
  }

Merci pour les correction possible, parce que je voulais mettre mon programme de lecture dans Tutoriel et Cours, car je n'ai pas trouvé de librairie comme on a l'habitude pour ces capteurs.
Seulement ça
https://github.com/nooploop-dev/nlink_parser/tree/master/src/tofsense
et ça
https://github.com/nooploop-dev/nlink_unpack
Soit le programme tel quel ou alors faire une librairie.
C'est dommage parce qu'il sont bien précis, même avec de la lumière ambiante.

ce truc là n'est pas terrible parce que vous lisez 16 octets (pas 15 d'ailleurs) sans vérifier qu'ils sont disponibles, en espérant que le delay(50) sera suffisant pour que l'octet d'après arrive

à 115200 bauds vous allez recevoir 11,5 octets par milliseconde en gros, donc lors d'un delay(50) vous pourriez recevoir 576 octets. Le buffer de réception ne peut en stocker que 64...

pour écouter le port série (ou gérer un flux asynchrone de manière générale) vous pouvez jeter un oeil à mon petit tuto sur le sujet et pour votre cas particulier vous pourriez jeter un oeil sur mon post Gestion de commandes sur port Série. La classe StreamDevice pourrait vous inspirer

vous pourriez effectivement ensuite faire une bibliothèque

J'ai oublié de changer le commentaire, c'est fait.
Je regarde tout ce que tu m'a envoyé et je reviens avec des modifs.
Bonne soirée et a demain

Merci pour la lecture et les explications que tu donne, je vais m'en servir et faire une bibliothèque pour ceux que ça intéresse.
Ca vas bien me servir car je doit faire dialoguer 3 Arduino par radio.
A plus.

cool !