Bonjour,

Je débute en Arduino et j'essaye de faire un truc tout bête : envoyer des requêtes sur un client Ethernet et lire les réponses.

En terme de hardware, j'ai un arduino MEGA, une shield ethernet et un lidar TIM.
Le premier exemple que j'essaye de faire:
- requête
Nom : Requete.png
Affichages : 153
Taille : 70,6 Ko
- réponse
Nom : Reponse.png
Affichages : 128
Taille : 49,1 Ko

J'ai essayé deux types de codes:
- un en mode char
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 
#include <SPI.h>
#include <Ethernet.h>
EthernetClient lidar2d;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {192,168,0,5};
byte maclidar[] = { 0x00, 0x06, 0x77, 0x87, 0x48, 0xBC };
byte iplidar[] = { 192, 168, 0, 1 };
byte login[] = {0x02, 0x73, 0x4D, 0x4E, 0x20, 0x53, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4D, 0x6F, 0x64, 0x65, 0x20, 0x30, 0x33, 0x20, 0x46, 0x34, 0x37, 0x32, 0x34, 0x37, 0x34, 0x34, 0x03};
char* loginchar = "sMN SetAccessMode 03 F4724744";
 
void setup()
{
  // put your setup code here, to run once:
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  delay(1000);
  while (!lidar2d.connected())
  {
    Serial.println("Connecting to the lidar ...");
    if (lidar2d.connect(iplidar, 2111))
    {
      Serial.println("Connected");
    }
    else
      {
        Serial.println("Connection failed");
      }
    delay(1000);
  }
  if (lidar2d.connected())
  {
    Serial.println(loginchar);
    lidar2d.println(loginchar);
    Serial.println("Login write done");
    char anslogin = "";
    while (lidar2d.available())
    {
      Serial.println(lidar2d.read());
      anslogin = sprintf(anslogin,lidar2d.read());
    }
    Serial.println(anslogin);
    if (anslogin == 'sAN SetAccessMode 1')
    {
      Serial.println("login OK");
    }
  }
}
 
void loop()
{
 
}
qui me donne cela sur le moniteur serie:
Nom : reponse-char.png
Affichages : 129
Taille : 83,1 Ko
- un en mode byte:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
 
 
#include <SPI.h>
#include <Ethernet.h>
EthernetClient lidar2d;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {192,168,0,5};
byte maclidar[] = { 0x00, 0x06, 0x77, 0x87, 0x48, 0xBC };
byte iplidar[] = { 192, 168, 0, 1 };
byte login[] = {0x02, 0x73, 0x4D, 0x4E, 0x20, 0x53, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4D, 0x6F, 0x64, 0x65, 0x20, 0x30, 0x33, 0x20, 0x46, 0x34, 0x37, 0x32, 0x34, 0x37, 0x34, 0x34, 0x03};
 
void setup()
{
  // put your setup code here, to run once:
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  delay(1000);
  while (!lidar2d.connected())
  {
    Serial.println("Connecting to the lidar ...");
    if (lidar2d.connect(iplidar, 2111))
    {
      Serial.println("Connected");
    }
    else
      {
        Serial.println("Connection failed");
      }
    delay(1000);
  }
  if (lidar2d.connected())
  {
    setthelidar(lidar2d, login);
  }
}
 
void loop()
{
}
 
 
void setthelidar(EthernetClient client, byte login)
{
  Serial.println("Setting to the lidar ...");
  client.write(login);
  Serial.println("Login write done");
  char anslogin = "";
  while (client.available())
  {
    Serial.println(client.read());
    anslogin = sprintf(anslogin,client.read());
  }
  Serial.println(anslogin);
  if (anslogin == 'sAN SetAccessMode 1')
  {
    Serial.println("login OK");
  }
}
qui me donne cela sur le moniteur série:
Nom : reponse-byte.png
Affichages : 138
Taille : 61,0 Ko

Je pense que je fais mal l'écriture de la requête, mais je ne sais pas pas où cela coince. Le lidar marche bioen, j;ai un code matlab qui le fait tourner mais je coince vraiment sur la traduction pour l'arduino !

Par avance, merci