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(); } }
-----




. Précisément, le code tel que vous me l'avez fourni me faisait initialement monter le chariot avant même que je donne l'indication du nombre de parts à couper. Normal, il y avait la fonction "if (!CapteurHautOn && !CapteurBasOn) monte();" dans le "void setup", j'ai donc remédié à cela en l'effaçant et intégrant une fonction "monte_puis_stop", mais ça ne me prend pas en compte le stop
(allons savoir pourquoi). Sinon, malgré que j'ai rentré les bon codes correspondants à ma télécommande, rien ne se passe lorsque je presse un bouton
Pouvez-vous encore (si vous ne vous lassez pas
m'aidez s.v.p. afin de remédier à cela ; ça m'éviterait d'aller rentrer le nombre de parts chaque fois sur l'ordi (en modifiant le "moteur.step(40)") avant de couper un gateau 

