Lidar sur Arduino Mega

Bonjour,
Je souhaiterais utiliser 2 Lidar sur une carte Arduino Mega.

Le code ci-dessous fonctionne pour 1 Lidar connecté sur les pin 10 et 11 du Mega. La distance est correctement affichée.

#include "TFLidar.h"
 #define USETFMINI
#define SERIAL Serial
SoftwareSerial uart(10, 11);
#ifdef USETFMINI
  TFMini SeeedTFMini;
  TFLidar SeeedTFLidar1(&SeeedTFMini);
#endif 
  
void setup() {
  SERIAL.begin(9600);
  while(!Serial);
  SeeedTFLidar1.begin(&uart,115200);
}
 
void loop() {
  while(!SeeedTFLidar1.get_frame_data()){
    delay(1); 
  }
  SERIAL.print("dist = ");
  SERIAL.println(SeeedTFLidar1.get_distance());
}

Pour faire fonctionner les 2 ensemble voici le code adapté

#include "TFLidar.h"
#define USETFMINI
#define SERIAL Serial
SoftwareSerial uart1(10, 11);
SoftwareSerial uart2(12, 13);
#ifdef USETFMINI
  TFMini SeeedTFMini1;
  TFMini SeeedTFMini2;
  TFLidar SeeedTFLidar1(&SeeedTFMini1);
  TFLidar SeeedTFLidar2(&SeeedTFMini2);
#endif 
 
void setup() {
  SERIAL.begin(9600);
  while(!Serial);
  SeeedTFLidar1.begin(&uart1,115200);
  SeeedTFLidar2.begin(&uart2,115200);
}
 
void loop() {
  while(!SeeedTFLidar2.get_frame_data()){
    delay(1);
  }
  SERIAL.print("dist = ");
  SERIAL.print(SeeedTFLidar2.get_distance());
  SERIAL.print('\t');
  
  while(!SeeedTFLidar1.get_frame_data()){
    delay(1);
  }
  SERIAL.println(SeeedTFLidar1.get_distance());
}

Sur le serial monitor ça donne :
Setup completed
Dist 81

Il s'arrête après avoir affiché la première distance du capteur 2
C'est apparemment ce code ci-dessous qui bloque mais je ne vois pas pourquoi

  while(!SeeedTFLidar1.get_frame_data()){
    delay(1);
  }

Si ces 2 lignes sont mises en commentaire, ça tourne mais c'est tout le temps la même distance qui est affichée

  • La compilation se passe sans problème
  • J'ai testé en changeant les pins
  • J'ai inversé les 2 Lidars

Le problème est peut-être évident mais je n'ai pas les compétences nécessaires.

Est-ce un code qui n'est pas compatible avec le MEGA qui dispose de 4 ports série ?

Quelqu'un aurait-il une bonne idée ?

Merci

En effet le Mega dispose de plusieurs ports série matériels, tu devrais donc les utiliser

Serial pour l'affichage console
Serial1 et Serial2 pour les lidar

Bonjour merci pour la réponse.
Mais de là à adapter le code en conséquence, ... ce n'est pas évident pour moi.

Enlève les déclarations softwareserial et change &uart1 et 2 en &Serial1 et 2

Regarde ici pour le connexions

Un grand merci lesept ! :slight_smile: :slight_smile:
Ca fonctionne, c'est fantastique ...

Sur le Mega j'ai connecté :

  • le Lidar 1 sur les pins 18 19 (Uart 1)
  • le Lidar 2 sur les pins 16 17 (Uart 2)

Et voici le code qui fonctionne :

#include "TFLidar.h"
#define USETFMINI
#define SERIAL Serial
#ifdef USETFMINI
TFMini SeeedTFMini1;
TFMini SeeedTFMini2;
TFLidar SeeedTFLidar1(&SeeedTFMini1);
TFLidar SeeedTFLidar2(&SeeedTFMini2);
#endif 
 
void setup() {
  SERIAL.begin(9600);
  while(!Serial);
  SeeedTFLidar1.begin(&Serial1,115200);
  SeeedTFLidar2.begin(&Serial2,115200);
  SERIAL.println("Setup completed ");
}
 
void loop() {
  while(!SeeedTFLidar1.get_frame_data()){
    delay(1);
  }
  SERIAL.print("dist Lidar 1 = ");
  SERIAL.print(SeeedTFLidar1.get_distance());
  SERIAL.print('\t');
  SERIAL.print("Lidar 2 = ");
  while(!SeeedTFLidar2.get_frame_data())
    {delay(1);}
  SERIAL.println(SeeedTFLidar2.get_distance());
  delay(100);
}

Ce n'était pas si compliqué...

Tes instructions étaient très claires donc c'était pas compliqué.
Par contre celui qui veut bien comprendre ce qu'il fait, ce n'est pas simple et c'est très chronophage.
Encore merci.