Robot arduino problème

a marqué ce sujet comme résolu.
Auteur du sujet

Bonjour à tous, j’ai récemment programmer un petit robot à l’aide d’une carte arduino, d’un shield moteurs officiel, d’un capteur a ultrasons, de deux moteurs etc… J’ai réussi à le rendre totalement autonomes mais j’ai par la suite voulu ajouter un moyen de le commander à l’aide d’une petite radiocommande et d’un récepteurIR. Cependant, j’ai revu mon programme dans tout les sens mais rien à faire, lorsque l’instruction "irrecv.enableIRIn();" apparait dans mon programme, les moteurs refusent de fonctionner (en revanche le reste telles que les leds répondent bien aux différentes instructions). Il me suffit d’enlever cette instruction pour que tout qu’ils acceptent de refonctionner mais bien sur elle m’est nécessaire pour utiliser la radiocommande… Voici mon programme:

  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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
//Radiocommande:
          #include <IRremote.h>
          int RECV_PIN = 10;
          IRrecv irrecv(RECV_PIN);
          decode_results results;

  //Capteur HC-SR04:             ( VCC=5v; GND=GND; Echo=7; Trig=6)
          #define echoPin 7 // Echo Pin
          #define trigPin 6 // Trigger Pin
          int maximumRange = 150; // Maximum range needed
          int minimumRange = 0; // Minimum range needed
          long duration, distance; // Durée que l'on utilise pour calculer la distance

void setup()
{
  //Affichage sur l'ordinateur:
          Serial.begin(9600);

  //Radiocommande:
          irrecv.enableIRIn(); // Active le récepteur IR    Bloque le fonctionnement des moteur!!!!!!!!!!

  //LED:
          pinMode(2,OUTPUT); //Led rouge qui brillera quand distance <= 15 cm
          pinMode(4,OUTPUT); //Led verte qui brillera quand ça avance

  //Capteur HC-SR04:
          pinMode(trigPin, OUTPUT);
          pinMode(echoPin, INPUT);

  //Moteur A:
          pinMode(9, OUTPUT);
          pinMode(12, OUTPUT);

  //Moteur B:
          pinMode(13, OUTPUT);
          pinMode(8, OUTPUT);

}

void loop() {
          if (irrecv.decode(&results)) {  //Si on appui sur un bouton
                    Serial.println(results.value, HEX); //Affiche la valeur en hexadécimal du bouton pressé

                    if (results.value==0xFFE21D){ //Si le bouton pressé est celui CH+
                      //Robot mit en fonctionnement automatique
                          //LEDS:
                                digitalWrite(4,HIGH); //LED verte allumée en temps normal
                                digitalWrite(2,LOW); //LED rouge éteinte en temps normal

                          //Motor A:
                                digitalWrite(12, LOW); //Direction (Forward ici)
                                digitalWrite(9, LOW);   //Frein (Disengage ici)
                                analogWrite(3, 120);   //Valeur pour vitesse

                          //Motor B:
                                digitalWrite(13, LOW);  //Direction (Forward ici)
                                digitalWrite(8, LOW);   //Frein (Disengage ici)
                                analogWrite(11, 117);    //Valeur pour vitesse

                          //Capteur HC-SR04:
                                digitalWrite(trigPin, LOW); 
                                delayMicroseconds(2);
                                digitalWrite(trigPin, HIGH);
                                delayMicroseconds(10); 
                                digitalWrite(trigPin, LOW);
                                duration = pulseIn(echoPin, HIGH);
                                distance = duration/58.2; //Calcul de la distance en cm à l'aide de la vitesse du song


                          if (distance >= maximumRange || distance <= minimumRange){

                                Serial.println("-"); //"-" s'affiche à l'écran de l'ordinateur lorsque le capteur HC-SR04 ne détecte pas la distance ou que celle-ci est hors de l'intervalle de tolérance
                          }

                          else { //La distance est correctement mesurée par le capteur

                                Serial.println(distance); //La distance est affiché en cm à l'écran de l'ordinateur

                                if (distance <=15){ 
                                        //LEDS:
                                            digitalWrite(2,HIGH); //Allume la LED rouge
                                            digitalWrite(4,LOW); //Eteint la LED verte

                                        //Moteurs qui s'arrêtent (avant de changer le sens de rotation pour ne pas les endommager):
                                            digitalWrite(9, HIGH);  //Frein du moteur A (engaged ici)
                                            digitalWrite(8, HIGH);  //Frein du moteur B (engaged ici)  
                                            delay(350); //Temps d'arrêt

                                        //Recul:
                                            digitalWrite(12, HIGH); //Direction A (Backward ici)
                                            digitalWrite(9, LOW);   //Frein A (Disengage ici)
                                            analogWrite(3, 100);   //Valeur A pour vitesse
                                            digitalWrite(13, HIGH);  //Direction B (Backward ici)
                                            digitalWrite(8, LOW);   //Frein B (Disengage ici)
                                            analogWrite(11, 100);    //Valeur A pour vitesse
                                            digitalWrite(2,HIGH); //Allume la LED rouge
                                            delay(500); //Temps de recule

                                        //Moteurs qui s'arrêtent (avant de changer le sens de rotation pour ne pas les endommager):
                                            digitalWrite(9, HIGH);  //Frein du moteur A (engaged ici)
                                            digitalWrite(8, HIGH);  //Frein du moteur B (engaged ici)
                                            digitalWrite(2,HIGH); //Allume la LED rouge  
                                            delay(300); //Temps d'arrêt

                                        //Rotation:
                                            digitalWrite(12, LOW); //Direction A (Forward ici)
                                            digitalWrite(9, LOW);   //Frein A (disengage ici)
                                            analogWrite(3, 100);   //Valeur A pour vitesse
                                            digitalWrite(13, HIGH);  //Direction B (Forward ici)
                                            digitalWrite(8, LOW);   //Frein B (disengage ici)
                                            analogWrite(11, 100);    //Valeur B pour vitesse
                                            digitalWrite(2,HIGH); //Allume la LED rouge
                                            delay(300); //Temps de la rotation

                                        //LEDS:
                                            digitalWrite(2,LOW); //Allume la LED rouge
                                            digitalWrite(4,HIGH); //Eteint la LED verte

                                                  }
                                else{ //Dans le cas où la distance mesurée est suffisamment grande pour continuer d'avancer
                                            //Ne change pas les instructions intiales données en premier
                                    }
                                }

                            delay(70); //Temps avant une nouvelle acquisition de la distance (Une faible valeur permet de meilleur résultats, ie moins d'obstacle pris dans la gueule

                                          }




                       if (results.value==0xFFC23D){ //Si la touche play/stop est pressée
                             //Robot en stand-by:
                                       //LEDS:
                                            digitalWrite(4,LOW); //LED verte éteinte
                                            digitalWrite(2,HIGH); //LED rouge allumé

                                       //Freins activés:
                                            digitalWrite(9, HIGH);   //Frein A (Engaged ici)                                          
                                            digitalWrite(8, HIGH);   //Frein B (Engaged ici)

                                          }

                      if (results.value==0xFFA25D){ //Si la touche CH- est pressée
                             //Robot en mode manuel:
                                       //LEDS:
                                            digitalWrite(4,HIGH); //LED verte allumée en temps normal
                                            digitalWrite(2,LOW); //LED rouge éteinte en temps normal

                                       //Freins activés:
                                            digitalWrite(9, HIGH);   //Frein A (Engaged ici)                                          
                                            digitalWrite(8, HIGH);   //Frein B (Engaged ici)

                                       //Commandes permmettant le pilotage:
                                            if (results.value==0xFF18E7){ //Si la touche 2 est pressée
                                                    //Marche avant:
                                                           digitalWrite(9, HIGH);   //Frein A (Engaged ici)                                          
                                                           digitalWrite(8, HIGH);   //Frein B (Engaged ici)
                                                           delay(400); //Temps d'arrêt pour les moteurs
                                                           digitalWrite(12, LOW); //Direction A (Forward ici)
                                                           digitalWrite(9, LOW);   //Frein A (Disengage ici)
                                                           analogWrite(3, 120);   //Valeur A pour vitesse
                                                           digitalWrite(13, LOW);  //Direction A (Forward ici)
                                                           digitalWrite(8, LOW);   //Frein A (Disengage ici)
                                                           analogWrite(11, 117);    //Valeur A pour vitesse
                                            }
                                            if (results.value==0xFF38C7){ //Si la touche 5 est pressée
                                                    //Marche arrière:
                                                           digitalWrite(9, HIGH);   //Frein A (Engaged ici)                                          
                                                           digitalWrite(8, HIGH);   //Frein B (Engaged ici)
                                                           delay(400); //Temps d'arrêt pour les moteurs
                                                           digitalWrite(12, HIGH); //Direction A (Backward ici)
                                                           digitalWrite(9, LOW);   //Frein A (Disengage ici)
                                                           analogWrite(3, 120);   //Valeur A pour vitesse
                                                           digitalWrite(13, HIGH);  //Direction B (Backward ici)
                                                           digitalWrite(8, LOW);   //Frein B (Disengage ici)
                                                           analogWrite(11, 117);    //Valeur B pour vitesse
                                            }
                                            if (results.value==0xFF10EF){ //Si la touche 4 est pressée
                                                    //Virage à gauche:
                                                           digitalWrite(9, HIGH);   //Frein A (Engaged ici)                                          
                                                           digitalWrite(8, HIGH);   //Frein B (Engaged ici)
                                                           delay(400); //Temps d'arrêt pour les moteurs
                                                           digitalWrite(12, LOW); //Direction A (Forward ici)
                                                           digitalWrite(9, LOW);   //Frein A (Disengage ici)
                                                           analogWrite(3, 120);   //Valeur A pour vitesse
                                                           digitalWrite(13, HIGH);  //Direction B (Backward ici)
                                                           digitalWrite(8, LOW);   //Frein B (Disengage ici)
                                                           analogWrite(11, 117);    //Valeur B pour vitesse
                                            }
                                            if (results.value==0xFF5AA5){ //Si la touche 6 est pressée
                                                    //Virage à droite:
                                                           digitalWrite(9, HIGH);   //Frein A (Engaged ici)                                          
                                                           digitalWrite(8, HIGH);   //Frein B (Engaged ici)
                                                           delay(400); //Temps d'arrêt pour les moteurs
                                                           digitalWrite(12, HIGH); //Direction A (Backward ici)
                                                           digitalWrite(9, LOW);   //Frein A (Disengage ici)
                                                           analogWrite(3, 120);   //Valeur A pour vitesse
                                                           digitalWrite(13, LOW);  //Direction B (Forward ici)
                                                           digitalWrite(8, LOW);   //Frein B (Disengage ici)
                                                           analogWrite(11, 117);    //Valeur B pour vitesse
                                            }



                                          }
                                          irrecv.resume(); // Receive the next value
                                          }

                                     }

D’avance merci pour votre aide! :)

Édité par µston

+0 -0

Salut et bienvenu(e) !

C’est bien d’avoir mis ton code dans un bloc de code, mais tu peux aussi activer la coloration syntaxique en spécifiant le langage que tu utilise après les back-quotes (```arduino dans ton message) cela aidera les autres agrumes à te lire et donc t’aider ;)

De plus tu indente trop ton code, tu n’as pas besoin de mettre de tabulation après un commentaire et je pense que ton code sera plus lisible si tu les omettrais.

« La Nature est un livre écrit en langage mathématique », Galilée

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte