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