Bonjour à tous. Je viens quérir votre aide pour mon programme Arduino avec le quelle j'ai un problème, n'arrivant pas à faire fonctionner mes servos moteurs.
En faisant des codes tout simples j'ai pu constater que mes servos moteurs fonctionnent, et donc en déduire que le problème vient de mon code, mais je n'arrive pas à déterminer pourquoi.
Je vous joins ma classe robot et son header :
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 | #include "robot.h" #include <Arduino.h> #include <Servo.h> robot::robot(): pinCapteurDroit(2), pinCapteurGauche(3) //constructeur { moteurDroit = new moteur(4, 5); moteurGauche = new moteur(7,6); // on allou les moteurs pinMode(pinCapteurGauche, INPUT); // on passe nos pins en mode entree pinMode(pinCapteurDroit, INPUT); roueFolle = new Servo(); roueFolle->attach(9); triangle = new Servo(); // on allou les servos moteurs et leur donne le bon port triangle->attach(10); } robot::~robot() //destructeur { delete moteurGauche; //on désallou les pointeurs sur les moteurs pour liberer la mémoire delete moteurDroit; delete roueFolle; delete triangle; } void robot::faireDemitour() //tant que le capteur droit ne detecte pas la bande blanche, on tourne à droite, puis on tourne jusqu'a ce que le capteur gauche la detecte aussi { while(pinCapteurDroit == NOIR) { tourner(DROIT); } while(pinCapteurGauche == NOIR ) { tourner(DROIT); } } void robot::testCapteurs(int choix, int temps) // fonction qui permet de controler la sortie des capteurs, 1 pour le capteur droit 2 pour le capteur droit et 3 pour les deux capteurs en meme temps, le 2eme argument et le temps entre chaque information { switch (choix) { case 1 : { if(couleurCapteurGauche == NOIR) Serial.println("noir"); else Serial.println("blanc"); delay(temps); break; } case 2 : { if(couleurCapteurDroit == NOIR) Serial.println("noir"); else Serial.println("blanc"); delay(temps); break; } case 3 : { if(couleurCapteurGauche == NOIR) Serial.println(" capteur gauche : noir"); else Serial.println(" capteur gauche : blanc"); if(couleurCapteurDroit == NOIR) Serial.println(" capteur droit : noir"); else Serial.println(" capteur droit : blanc"); delay(temps); break; } } } void robot::accelerer(int vitesse) // methode pour accelerer { moteurDroit->accelerer(vitesse); moteurGauche->accelerer(vitesse); } void robot::testMoteur(int choix) // on test les moteurs du robot : 1 = moteur gauche, 2 = moteur droit, 3 = les deux moteurs { switch(choix) { case 1: { moteurGauche->test(); //appelle de la fonction test du moteur droit break; } case 2: { moteurDroit->test(); //appelle de la fonction test du moteur gauche break; } case 3: // cette fois on recreer la fonction de test pour faire tourner les deux en meme temps { int i =0; for(i =0; i <255;i++) { analogWrite(moteurGauche->getPinTension(), i); analogWrite(moteurDroit->getPinTension(), i); delay(25); } for(i =254; i >1;i--) { analogWrite(moteurGauche->getPinTension(), i); analogWrite(moteurDroit->getPinTension(), i); delay(25); } break; } } } void robot::tourner(int direction) //fonction pour tourner, 1 = à gauche et 2 = à droite { if(direction == DROIT) { Serial.println(" on tourne à droite "); roueFolle->write(45); } else Serial.println(" on tourne à gauche "); roueFolle->write(45); } void robot::bougerTriangle(int niveau) { if(niveau ==1) triangle->write(90); else triangle->write(0); } void robot::corrigerTrajectoire() // methode qui sera appelé pour corriger la trajectoire { if(couleurCapteurDroit == BLANC) //si le capteur droit detecte une bande blanche { tourner(DROIT); // on tourne donc à droite } else if (couleurCapteurGauche == BLANC) { tourner(GAUCHE); // et réciproquement à gauche si le capteur gauche mord la ligne blanche } } void robot::actualiserCapteur() //methode qui permet d'actualiser les valeurs des capteurs penses à rigoler ducon ! { couleurCapteurGauche = digitalRead(pinCapteurGauche); couleurCapteurDroit = digitalRead(pinCapteurDroit); } void robot::testServomoteur() { } |
et voici le header :
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 | #ifndef ROBOT // protection contre l'inclusion multiple #define ROBOT #include "moteur.h" #include <Servo.h> class robot { private : moteur *moteurGauche; moteur *moteurDroit; // pointeur de type moteur, pour pouvoir les controller Servo *roueFolle; Servo *triangle; // pointeurs de type servo moteurs pour nos servos moteurs int pinCapteurGauche; int pinCapteurDroit; // les pins ou nos capteurs sont connectés int couleurCapteurGauche; int couleurCapteurDroit; public : robot(); // constructeur ~robot(); // destructeur void tourner(int direction); // methode qui sert à tourner 1 pour à gauche, 2 pour tourner à droite void bougerTriangle(int niveau); // methode qui sert à monter ou baisser le triangle 1 pour le monter, 2 pour descendre void corrigerTrajectoire(); //methode qui fait tourner quand un capteur montre qu'on coupe la ligne blanche void testCapteurs(int choix, int temps); // fonction qui permet de controler la sortie des capteurs, 1 pour le capteur droit 2 pour le capteur droit et 3 pour les deux capteurs en meme temps, le 2eme argument determine le delay entre deux infos, attention ! necessite la communication avec le port serie !!!! void faireDemitour(); // fonction pour faire demi tour void actualiserCapteur(); //methode des moteurs void testMoteur(int choix); // on test les moteurs du robot : 1 = moteur gauche, 2 = moteur droit, 3 = les deux moteurs void accelerer(int vitesse); // methode qui sert à accelerer //methode des servos moteurs eux aussi ils y ont le droit roh mais ho ! void testServomoteur(); }; enum{BLANC, NOIR}; enum{USELESS, GAUCHE, DROIT, DEUX}; #endif |
+0
-0