Bonjour tout le monde, je viens encore à vous afin de pouvoir déceler ce qui ne vas pas dans mon programme ; il est écris pourtant selon la syntaxe c++, ce compile bien mais me fais n'importe quoi ! Peut-être avez-vous le regard plus acéré
Voilà : la fonction qui doit s'effectuer dans case 0xFDOOFF, soit
ne me fait que "if (!CapteurHautOn && !CapteurBasOn) monte();" ! En gros, lorsque je presse le bouton qui génère le code "FD00FF", mon chariot (oui, mon programme entraine un chariot) ne fait que monter, butte contre le fin de course haut ("CapteurHaut") et force sans prendre en compte le condition "if(CapteurHautOn)" ! Pourquoi ? D'où vient le problème svp ?Code:case 0xFD00FF: // Si fin de course bas atteint if(CapteurBasOn) { stop(); delay(500); monte(); delay(500); } // Si fin de course haut atteint if(CapteurHautOn) { stop(); moteur.step(40); descend(); delay(500); } if (!CapteurHautOn && !CapteurBasOn) monte(); break;
Voici le code, vous comprendrez surrement !
Code:#include "IRremote.h" #include <Stepper.h> int receiver = 5; int etat; Stepper moteur(200, 10, 11, 12, 13); IRrecv irrecv(receiver); decode_results results; #define motor1Pin1 3 // pin 2 (Input 1) du L293D #define motor1Pin2 4 // pin 7 (Input 2) du L293D #define enablePin 9 // pin 1 (Enable 1) du L293D #define Fin_C_Haut 7 // broche 7 du micro-contrôleur se nomme maintenant : Capt1 #define Fin_C_Bas 8 // broche 3 du micro-contrôleur se nomme maintenant : Capt2 #define CapteurHautOn !digitalRead (Fin_C_Haut) //capteur OUVERT au repos avec pull-up, donc actif LOW #define CapteurBasOn !digitalRead (Fin_C_Bas) //capteur OUVERT au repos avec pull-up, donc actif LOW void monte() // un moteur entraîne un chariot qui monte { digitalWrite(motor1Pin1, LOW); // mettre pin 2 a 293D low digitalWrite(motor1Pin2, HIGH); // mettre pin 7 a L293D high } void descend() // le moteur tourne dans l'autre sens ; le chariot dessend { digitalWrite(motor1Pin1, HIGH); // Mettre pin 2 a L293D high digitalWrite(motor1Pin2, LOW); // Mettre pin 7 a L293D low } void stop() // le moteur ne tourne pas ; le chariot est immobile { digitalWrite(motor1Pin1, HIGH); // Mettre pin 2 a L293D high digitalWrite(motor1Pin2, HIGH); // Mettre pin 7 a L293D low } void setup() { irrecv.enableIRIn(); moteur.setSpeed(30); pinMode(motor1Pin1, OUTPUT); pinMode(motor1Pin2, OUTPUT); pinMode(enablePin, OUTPUT); // initialistaion des capteurs qui sont de preference fermé au repos pinMode(Fin_C_Haut, INPUT); // Capt1 est une broche d'entree pinMode(Fin_C_Bas, INPUT); // Capt2 est une broche d'entree stop(); // Mettre la broche Enable a high comme ca le moteur tourne digitalWrite(enablePin, HIGH); } void translateIR() // actions selon le code reçu { switch(results.value) { case 0xFD00FF: // Si fin de course bas atteint if(CapteurBasOn) { stop(); delay(500); monte(); delay(500); } // Si fin de course haut atteint if(CapteurHautOn) { stop(); moteur.step(40); // un moteur pas-à-pas effectue 40 pas descend(); delay(500); } // si aucun fin de course atteint if (!CapteurHautOn && !CapteurBasOn) monte(); break; default: {} break; }// End Case } void loop() { if (irrecv.decode(&results)) // savoir si signal reçu { translateIR(); irrecv.resume(); } }
-----