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
- réponse
J'ai essayé deux types de codes:
- un en mode char
qui me donne cela sur le moniteur serie:
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() { }
- un en mode byte:
qui me donne cela sur le moniteur série:
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"); } }
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
Partager