Dans mon programme j'utilise des "Else if" pour diriger et donner des ordres à mon robot. Avance, recule, etc...
Un en particulier pose un problème car il ne veut pas faire ce que je lui demande. Lorsque je lui demande de revenir il ne fait qu'une partie de l'ordre.
Dans le prog je lui dit de faire demi-tour et avancer, mais il ne fait que le demi-tour et s'arrete. J'ai essayé un tas de choses mais il ne veut rien savoir.
Voir PARTI DU CODE QUI POSE PROBLEME
Tous les autres ordres fonctionnent mai pas celui-ci. Je vous mets la partie du code :
Code C : 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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115 //*********************************************** //* LOOPING * //*********************************************** void loop() { while (Serial.available()) { delay (2); // lecture car par car char c = Serial.read(); messageRecu += c; } if (messageRecu.length() > 0) { if ((messageRecu.indexOf("recule") != -1)) { // marche arrière Serial.println("recule"); stopp(); recul(); delay(1000); stopp(); messageRecu = ""; } else if ((messageRecu.indexOf("bâbord") != -1)) { // moteur stop Serial.println("quart-de-tour à gauche"); turnG(); delay(600); stopp(); messageRecu = ""; } else if ((messageRecu.indexOf("tribord") != -1)) { // moteur stop Serial.println("quart-de-tour à droite"); turnD(); delay(600); stopp(); messageRecu = ""; } else if (((messageRecu.indexOf("demi-tour gauche") != -1)) || ((messageRecu.indexOf("retourne gauche") != -1))) { // demi-tour gauche Serial.println("demi-tour gauche"); turnG(); delay(2600); stopp(); messageRecu = ""; } else if (((messageRecu.indexOf("demi-tour droite") != -1)) || ((messageRecu.indexOf("retourne droite") != -1))) { // demi-tour droite Serial.println("demi-tour droite"); turnD(); delay(2600); stopp(); messageRecu = ""; } else if ((messageRecu.indexOf("reviens") != -1)) { // Demi-tour et reviens Serial.println("reviens"); stopp(); turnD(); delay(2600); stopp(); avance(); // PARTI DU CODE QUI POSE PROBLEME messageRecu = ""; } else if ((messageRecu.indexOf("gauche") != -1)) { // tourne à gauche brièvement Serial.println ("a gauche"); turnG(); delay(100); stopp(); messageRecu = ""; } else if ((messageRecu.indexOf("droite") != -1)) { //tourne à droite brièvement Serial.println("a droite"); turnD(); delay(100); stopp(); messageRecu = ""; } else if (((messageRecu.indexOf("stoppe") != -1)) || ((messageRecu.indexOf("stop") != -1)) || ((messageRecu.indexOf("arrête") != -1)) || ((messageRecu.indexOf("bouge plus") != -1))) { // moteur stop Serial.println("stop"); stopp(); // Transmission etat LED Rouge Wire.beginTransmission(0x02); // Envoyer vers device #Led Wire.write(2); // Envoi un 2 Wire.endTransmission(0x02); // Arreter la transmission delay(1000); // Transmission etat LED Eteint Wire.beginTransmission(0x02); // Envoyer vers device #Led Wire.write(0); // Envoi un 0 Wire.endTransmission(0x02); // Arreter la transmission messageRecu = ""; } else if (((messageRecu.indexOf("demi-tour à gauche") != -1)) || ((messageRecu.indexOf("demi-tour gauche") != -1)) || ((messageRecu.indexOf("reviens") != -1))) { // moteur stop Serial.println("demi-tour gauche"); turnG(); delay(2600); messageRecu = ""; } else if (((messageRecu.indexOf("demi-tour à droite") != -1)) || ((messageRecu.indexOf("demi-tour droite") != -1)) || ((messageRecu.indexOf("reviens") != -1))) { // moteur stop Serial.println("demi-tour droite"); turnD(); delay(2600); messageRecu = ""; } else if ((messageRecu.indexOf("repos") != -1)) { // marche avant Serial.println("repos"); Qest_capt_B(); stopp(); // Transmission etat LED Eteint Wire.beginTransmission(0x02); // Envoyer vers device #Led Wire.write(0); // Envoi un 0 Wire.endTransmission(0x02); // Arreter la transmission delay(5000); //les instructions à répéter tant que la condition est vérifiée messageRecu = ""; } else if (((messageRecu.indexOf("avance") != -1)) || ((messageRecu.indexOf("go") != -1)) || ((messageRecu.indexOf("vas-y") != -1)) || ((messageRecu.indexOf("viens ici") != -1))) { Serial.println("avance"); onyva(); //les instructions à répéter tant que la condition est vérifiée } else if ((messageRecu.indexOf("manuel") != -1)) { // marche avant Serial.println (messageRecu); Qest_capt_B(); if (((dist_AVCGB < 3) || (dist_AVGB < 3)) || ((dist_AVCDB < 3) || (dist_AVDB < 3)) || ((dist_AVCH < 10) || (dist_COL_F < 10) || (dist_TETE_F < 10)) ) { recul(); delay(150); stopp(); messageRecu = "stop"; messageRecu = ""; } else { avance(); //les instructions à répéter tant que la condition est vérifiée } }
Quelqu'un à une idée, merci
Cordialement
Partager