Répondre à la discussion
Affichage des résultats 1 à 27 sur 27

Programme Arduino - quand la logique n'est pas logique_Help me please !



  1. #1
    invite49040884

    Question Programme Arduino - quand la logique n'est pas logique_Help me please !


    ------

    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

    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;
    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 ?

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

    -----

  2. Publicité
  3. #2
    nornand

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    il passe peut être trop vite dessus , mémorise l'état du capteur et lis cette mémoire , tu l'effaces une fois lue.

  4. #3
    jiherve

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    bonsoir,
    si j'ai bien compris à l’état "normal" capteur haut et bas sont faux tout les deux donc il est écrit que cela monte, il bute dans capteur haut qui devient vrai donc le chariot recule , on retombe alors dans le cas précédent et cela oscille, donc tout est conforme ,un programme n'invente rien il exécute!
    Nornand a raison(malgré un diagnostic faux), il faut donc introduire une mémoire ce qui introduira une hystérésis, comme tu es un grand garçon tu devrais y arriver tout seul!
    JR
    Dernière modification par jiherve ; 30/06/2014 à 20h19.
    l'électronique c'est pas du vaudou!

  5. #4
    invite49040884

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    Non nornand ! avec un programme type "monter → contacte capteur haut → dssendre → contacte capteur bas" ça fonctionne parfaitement, je penses que cela viens de la fonction switch (mal placée ?). Merci de votre attention ^^

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    invite49040884

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    Tenez, ce programme similaire fonctionne à merveille par exemple, mais il se déclenche dès la carte allumée ;

    Code:
    //début
    #include <Stepper.h>
    
    #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
    Stepper moteur(200, 10, 11, 12, 13);
    
    
    #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() {
    	digitalWrite(motor1Pin1, LOW); // mettre pin 2 a 293D low
    	digitalWrite(motor1Pin2, HIGH); // mettre pin 7 a L293D high
    }
    void descend() {
    	digitalWrite(motor1Pin1, HIGH); // Mettre pin 2 a L293D high
    	digitalWrite(motor1Pin2, LOW); // Mettre pin 7 a L293D low
    }
    
    void stop() {
    	digitalWrite(motor1Pin1, HIGH); // Mettre pin 2 a L293D high
    	digitalWrite(motor1Pin2, HIGH); // Mettre pin 7 a L293D low
    }
    
    
    void setup() {
    	
            moteur.setSpeed(15);
    	pinMode(motor1Pin1, OUTPUT);
    	pinMode(motor1Pin2, OUTPUT);
    	pinMode(enablePin, OUTPUT);
    	
    	// initialistaion des capteurs
    	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);
    	
    	// si au debut on est entre les deux capteur donc on monte
    	if (!CapteurHautOn && !CapteurBasOn) monte();
    }
    
    void loop() // boucle principal
    {
    	//contenu du programme
    	
    	// 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); // le moteur pas-à-pas effectue 40 pas
    		descend();
    		delay(500);
    	}
    }
    //fin

    Mais moi, je veux déclencher le mécanisme que lorsque je presse un bouton sur la télécommande IR. Ensuite je voudrais utiliser tous les bouton, executant le même programme mais seule la valeur des pas du moteur pas-à-pas changeant :
    Code:
     if(CapteurHautOn) {
    		stop();
                    moteur.step(x); // le moteur pas-à-pas effectue x pas, selon le bouton pressé
    		descend();
    		delay(500);

  9. #6
    mkh.mourad

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    Salut
    Tu dois initialiser ton Stepper avant de l'utiliser.

    #define STEPS 200
    Stepper stepper(STEPS, 8, 9, 10, 11);
    void setup()
    {
    ...
    ..
    .
    // regle ta vitesse de rotation par exp 30 RPMs
    stepper.setSpeed(30);
    }
    Apres tu fais tourner ton moteur le temps oů la couteau est en haut, attendre que la rotation soit finis avant de proceder à la descente.
    C'est quoi l'histoire de ce case 0xFD00FF: ?

  10. Publicité
  11. #7
    mkh.mourad

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    Pardon, je n'ai qu'un smartphone. J'ai du mal a lire et écrire dans le forum. Je n'ai ps vu ton code quand tu lis le module infrarouge.
    Je vais voir ca quand je serait à la maison tête reposé e

  12. #8
    invite49040884

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    oui, merci, mais le moteur pas à pas fonctionne parfaitement ^^ En gros, ce que je cherche seulement, c'est que la touche appuyée sur la télécommande définit le nombre de pas que doit effectuer le moteur. Pour être claire une bonne fois pour toute, ce programme ci-dessus m'effectue toujours 40 pas :

    Code:
    //début
    #include <Stepper.h>
    
    #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
    Stepper moteur(200, 10, 11, 12, 13);
    
    
    #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() {
    	digitalWrite(motor1Pin1, LOW); // mettre pin 2 a 293D low
    	digitalWrite(motor1Pin2, HIGH); // mettre pin 7 a L293D high
    }
    void descend() {
    	digitalWrite(motor1Pin1, HIGH); // Mettre pin 2 a L293D high
    	digitalWrite(motor1Pin2, LOW); // Mettre pin 7 a L293D low
    }
    
    void stop() {
    	digitalWrite(motor1Pin1, HIGH); // Mettre pin 2 a L293D high
    	digitalWrite(motor1Pin2, HIGH); // Mettre pin 7 a L293D low
    }
    
    
    void setup() {
    	
            moteur.setSpeed(15);
    	pinMode(motor1Pin1, OUTPUT);
    	pinMode(motor1Pin2, OUTPUT);
    	pinMode(enablePin, OUTPUT);
    	
    	// initialistaion des capteurs
    	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);
    	
    	// si au debut on est entre les deux capteur donc on monte
    	if (!CapteurHautOn && !CapteurBasOn) monte();
    }
    
    void loop() // boucle principal
    {
    	//contenu du programme
    	
    	// 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); // le moteur pas-à-pas effectue 40 pas
    		descend();
    		delay(500);
    	}
    }
    //fin

    Et ce dont j'ai besoin, c'est simplement faire fonctionner ce porgramme :

    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();
      }
      
    }
    Je n'ai mis qu'un cas possible (un seul bouton de la télécommande), mais j'en metterai ensuite 21. Par exemple, bouton 1 fais effectuer 100 pas au moteur, bouton 2, 80 pas ...

  13. #9
    mkh.mourad

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    est ce que tu as ce type de module Infrarouge:
    http://arduino-info.wikispaces.com/IR-RemoteControl
    tu peux me donner la liste des boutons que tu veux utiliser devant chaque nom de bouton son code IR?

  14. #10
    mkh.mourad

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    a toi de vérifier ce code et de le corriger a votre guise
    Code:
    #include "IRremote.h"
    #include <Stepper.h>
    
    
    #define receiver 5 // reception module IR sur pin 5
    #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
    #define nombre_de_pas 200
    
    
    Stepper moteur(nombre_de_pas, 10, 11, 12, 13);
    IRrecv irrecv(receiver);
    decode_results results;
    
    void monte(); // un moteur entraîne un chariot qui monte
    void descend(); // le moteur tourne dans l'autre sens ; le chariot dessend
    void stop(); // le moteur ne tourne pas ; le chariot est immobile
    void translationChariot(); // le moteur fait une descente puis il monte
    void rotation(int parts); //rotation du plateau une part de parts
    
    void setup()
    {
      irrecv.enableIRIn();	// initialisation du recepteur Ir
      moteur.setSpeed(30);	// initialisation du RPM du moteur p_a_p
    
      //initialisation des sorties du moteur de trabsalation H/B
      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);
    
      // si au debut on est entre les deux capteur donc on monte
      if (!CapteurHautOn && !CapteurBasOn) monte();
    
      // Mettre la broche Enable a high comme ca le moteur tourne
      digitalWrite(enablePin, HIGH);
    }
    
    
    void loop()
    {
      if (irrecv.decode(&results)) {
    
        // buton xx est pressé
        if (results.value == 0xFFAABBCC) {
          for (int i = 0; i < 8; i++) //decoupe le guateau sur 8
          {
            rotation(8); // rotation du plateau d'un part sur 8
            translationChariot(); //decoupe le gateau
          }
        }
    
        // buton yy est pressé
        if (results.value == 0xFFAABBDC) {
          for (int i = 0; i < 6; i++) //decoupe le guateau sur 6
          {
            rotation(6); // rotation du plateau d'un part sur 6
            translationChariot(); //decoupe le gateau
          }
        }
    
        // buton zz est pressé
        if (results.value == 0xFFAABBCE) {
          for (int i = 0; i < 5; i++) //decoupe le guateau sur 5
          {
            rotation(5); // rotation du plateau d'un part sur 5
            translationChariot(); //decoupe le gateau
          }
        }
    
        // buton ww est pressé
        if (results.value == 0xFFAABB2C) {
          for (int i = 0; i < 4; i++) //decoupe le guateau sur 4
          {
            rotation(4); // rotation du plateau d'un part sur 4
            translationChariot(); //decoupe le gateau
          }
        }
      }
      irrecv.resume(); // Receive the next value
    }
    
    
    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
    }
    
    // le moteur ne tourne pas ; le chariot est immobile
    void stop()
    {
      digitalWrite(motor1Pin1, HIGH); // Mettre pin 2 a L293D high
      digitalWrite(motor1Pin2, HIGH); // Mettre pin 7 a L293D low
    }
    
    // le moteur fait une descente puis il monte
    void translationChariot()
    {
      //descend jusqu'au  fin de course bas
      while (!CapteurBasOn) {
        descend();
      }
      // fin de course bas atteint
      stop();
      delay(500);
    
      //monte jusqu'au  fin de course haut
      while (!CapteurHautOn) {
        monte();
      }
      //  fin de course haut atteint
      stop();
      delay(500);
    }
    
    //rotation du plateau un seul part sur Parts
    void rotation(int parts)
    {
      moteur.step(nombre_de_pas / parts);
    }

  15. #11
    invite49040884

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    C'est exactement ce module infrarouge, je testerai le code ; un grand merci, vous m'avez vraiment mâché le travail. Au besoin je vous fournirai tous les codes, mais faudrait pas trop que j'abuse non plus ^^ Je souhaite un jour acquérir votre expérience

  16. #12
    mkh.mourad

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    Les if des code infrarouge des boutons on peut les mettre dans des switch/case.
    J'ai testé cette bibliothèque avec un récepteur ir récupéré d'un récepteur de satellite numérique, et ca fonctionne à merveille.
    Très intéressant, on peut l'intégrer avec une grande simplicité dans beaucoup de projets.

  17. Publicité
  18. #13
    invite49040884

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    Surtout que ça ne me prend qu'une broche de l'arduino (et j'ai la version uno ^^) ! Dans le cas de mon projet, n'importe quel pavé numérique aurait fait l'affaire, mais là c'est vrai que c'est intéressant !

  19. #14
    invite49040884

    Question Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    Ben le code ne fonctionne pas, malgré ça bonne construction (me semble t-il) . 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 ) ; c'est quant même aussi plus stylé de déclencher le processus grâce à la télécomande, et plus simple ! MERCI

    Voici le code tel que je l'ai adapté (il devrait fonctionner mais ne fonctionne pas

    Code:
    #include "IRremote.h"
    #include <Stepper.h>
    
    
    #define receiver 5 // reception module IR sur pin 5
    #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
    #define nombre_de_pas 400 // moteur pas-à-pas 200 pas par tour dois effectuer 400 pas pour un tour pour 1 tour du plateau cylindrique
    
    
    Stepper moteur(nombre_de_pas, 10, 11, 12, 13);
    IRrecv irrecv(receiver);
    decode_results results;
    
    void monte(); // un moteur entraîne un chariot qui monte
    void descend(); // le moteur tourne dans l'autre sens ; le chariot dessend
    void stop(); // le moteur ne tourne pas ; le chariot est immobile
    void translationChariot(); // le moteur fait une descente puis il monte
    void rotation(int parts); //rotation du plateau une part de parts
    
    void setup()
    {
      irrecv.enableIRIn();	// initialisation du recepteur Ir
      moteur.setSpeed(20);	// initialisation du RPM du moteur p_a_p
    
      //initialisation des sorties du moteur de trabsalation H/B
      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);
    
      // si au debut on est entre les deux capteur donc on monte
      //if (!CapteurHautOn && !CapteurBasOn) monte();
    
      // Mettre la broche Enable a high comme ca le moteur tourne
      digitalWrite(enablePin, HIGH);
      if (!CapteurHautOn && !CapteurBasOn) monte_puis_stop();
    
    }
    
    
    void loop()
    {
      if (irrecv.decode(&results)) {
    
        // buton 4 est pressé
        if (results.value == 0xFD00FF) {
          for (int i = 0; i < 4; i++) //decoupe le guateau sur 4
          {
            rotation(4); // rotation du plateau d'un part sur 4
            translationChariot(); //decoupe le gateau
          }
        }
    
        // buton 5 est pressé
        if (results.value == 0xFD807F) {
          for (int i = 0; i < 5; i++) //decoupe le guateau sur 5
          {
            rotation(5); // rotation du plateau d'un part sur 5
            translationChariot(); //decoupe le gateau
          }
        }
    
        // buton 6 est pressé
        if (results.value == 0xFD40BF) {
          for (int i = 0; i < 6; i++) //decoupe le guateau sur 6
          {
            rotation(6); // rotation du plateau d'un part sur 6
            translationChariot(); //decoupe le gateau
          }
        }
    
        // buton 7 est pressé
        if (results.value == 0xFD20DF) {
          for (int i = 0; i < 7; i++) //decoupe le guateau sur 7
          {
            rotation(7); // rotation du plateau d'un part sur 7
            translationChariot(); //decoupe le gateau
          }
        }
        
        // buton 8 est pressé
        if (results.value == 0xFDA05F) {
          for (int i = 0; i < 8; i++) //decoupe le guateau sur 8
          {
            rotation(8); // rotation du plateau d'un part sur 8
            translationChariot(); //decoupe le gateau
          }
        }
        
        // buton 9 est pressé
        if (results.value == 0xFD609F) {
          for (int i = 0; i < 9; i++) //decoupe le guateau sur 9
          {
            rotation(9); // rotation du plateau d'un part sur 9
            translationChariot(); //decoupe le gateau
          }
        }
        
        // buton 10 est pressé
        if (results.value == 0xFD10EF) {
          for (int i = 0; i < 10; i++) //decoupe le guateau sur 10
          {
            rotation(10); // rotation du plateau d'un part sur 10
            translationChariot(); //decoupe le gateau
          }
        }
        
        // buton 11 est pressé
        if (results.value == 0xFD906F) {
          for (int i = 0; i < 11; i++) //decoupe le guateau sur 11
          {
            rotation(11); // rotation du plateau d'un part sur 11
            translationChariot(); //decoupe le gateau
          }
        }
        
        // buton 12 est pressé
        if (results.value == 0xFD50AF) {
          for (int i = 0; i < 12; i++) //decoupe le guateau sur 12
          {
            rotation(12); // rotation du plateau d'un part sur 12
            translationChariot(); //decoupe le gateau
          }
        }
        
        // buton 13 est pressé
        if (results.value == 0xFD30CF) {
          for (int i = 0; i < 13; i++) //decoupe le guateau sur 13
          {
            rotation(13); // rotation du plateau d'un part sur 13
            translationChariot(); //decoupe le gateau
          }
        }
        
        // buton 14 est pressé
        if (results.value == 0xFDB04F) {
          for (int i = 0; i < 14; i++) //decoupe le guateau sur 14
          {
            rotation(14); // rotation du plateau d'un part sur 14
            translationChariot(); //decoupe le gateau
          }
        }
        
        // buton 15 est pressé
        if (results.value == 0xFD708F) {
          for (int i = 0; i < 15; i++) //decoupe le guateau sur 15
          {
            rotation(15); // rotation du plateau d'un part sur 15
            translationChariot(); //decoupe le gateau
          }
        }
        
        // buton 16 est pressé
        if (results.value == 0xFD08F7) {
          for (int i = 0; i < 16; i++) //decoupe le guateau sur 16
          {
            rotation(16); // rotation du plateau d'un part sur 16
            translationChariot(); //decoupe le gateau
          }
        }
        
        // buton 17 est pressé
        if (results.value == 0xFD8877) {
          for (int i = 0; i < 17; i++) //decoupe le guateau sur 17
          {
            rotation(17); // rotation du plateau d'un part sur 17
            translationChariot(); //decoupe le gateau
          }
        }
        
        // buton 18 est pressé
        if (results.value == 0xFD48B7) {
          for (int i = 0; i < 18; i++) //decoupe le guateau sur 18
          {
            rotation(18); // rotation du plateau d'un part sur 18
            translationChariot(); //decoupe le gateau
          }
        }
        
        // buton 19 est pressé
        if (results.value == 0xFD28D7) {
          for (int i = 0; i < 19; i++) //decoupe le guateau sur 19
          {
            rotation(19); // rotation du plateau d'un part sur 19
            translationChariot(); //decoupe le gateau
          }
        }
        
        // buton 20 est pressé
        if (results.value == 0xFDA857) {
          for (int i = 0; i < 20; i++) //decoupe le guateau sur 20
          {
            rotation(20); // rotation du plateau d'un part sur 20
            translationChariot(); //decoupe le gateau
          }
        }
        
        // buton 21 est pressé
        if (results.value == 0xFD6897) {
          for (int i = 0; i < 21; i++) //decoupe le guateau sur 21
          {
            rotation(21); // rotation du plateau d'un part sur 21
            translationChariot(); //decoupe le gateau
          }
        }
        
        // buton 22 est pressé
        if (results.value == 0xFD18E7) {
          for (int i = 0; i < 22; i++) //decoupe le guateau sur 22
          {
            rotation(22); // rotation du plateau d'un part sur 22
            translationChariot(); //decoupe le gateau
          }
        }
        
        // buton 23 est pressé
        if (results.value == 0xFD9867) {
          for (int i = 0; i < 23; i++) //decoupe le guateau sur 23
          {
            rotation(23); // rotation du plateau d'un part sur 23
            translationChariot(); //decoupe le gateau
          }
        }
        
        // buton 24 est pressé
        if (results.value == 0xFD58A7) {
          for (int i = 0; i < 24; i++) //decoupe le guateau sur 24
          {
            rotation(24); // rotation du plateau d'un part sur 24
            translationChariot(); //decoupe le gateau
          }
        }
        
      }
      irrecv.resume(); // Receive the next value
    }
    
    void monte_puis_stop()
    {
      while (!CapteurHautOn) {
        monte();
      }
    }
      
    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
    }
    
    // le moteur ne tourne pas ; le chariot est immobile
    void stop()
    {
      digitalWrite(motor1Pin1, HIGH); // Mettre pin 2 a L293D high
      digitalWrite(motor1Pin2, HIGH); // Mettre pin 7 a L293D low
    }
    
    // le moteur fait une descente puis il monte
    void translationChariot()
    {
      //descend jusqu'au  fin de course bas
      while (!CapteurBasOn) {
        descend();
      }
      // fin de course bas atteint
      stop();
      delay(500);
    
      //monte jusqu'au  fin de course haut
      while (!CapteurHautOn) {
        monte();
      }
      //  fin de course haut atteint
      stop();
      delay(500);
    }
    
    //rotation du plateau un seul part sur Parts
    void rotation(int parts)
    {
      moteur.step(nombre_de_pas / parts);
    }

  20. #15
    mkh.mourad

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    Normalement le chariot doit avoir une position de repos. Il dois a mon avis se positionner en haut en attendant une commande.
    Donc la ligne dans le setup est logique.
    Pour le code je te l'ai écris suovant tes prescriptions et je n'ai pas de prototype pour faire des essais.
    Hier j'ai fais un petit montage pour tester un récepteur IR, et le test c'est passé bien.
    Code:
    void loop()
    {      for (int i = 0; i < 8; i++) //decoupe le guateau sur 8
          {
            rotation(8); // rotation du plateau d'un part sur 8
            translationChariot(); //decoupe le gateau
          }
    }
    Tu changes la fonction loop dans programme par celleci pour un rest. Et tu me dis si elle decoupe ton gâteau sur 8 à l'infini.
    Dernière modification par mkh.mourad ; 02/07/2014 à 16h52.

  21. #16
    mkh.mourad

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    voila, tu essais et tu me dis si ce code te fais tes conneries :
    Code:
    #include "IRremote.h"
    #include <Stepper.h>
    
    
    #define receiver 5 // reception module IR sur pin 5
    #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
    #define nombre_de_pas 200
    
    // codes des boutons de la telecommande IR
    #define BOUTON_4 0xFD00FF
    #define BOUTON_5 0xFD807F
    #define BOUTON_6 0xFD40BF
    #define BOUTON_7 0xFD20DF
    #define BOUTON_8 0xFDA05F
    #define BOUTON_9 0xFD609F
    #define BOUTON_10 0xFD10EF
    #define BOUTON_11 0xFD906F
    #define BOUTON_12 0xFD50AF
    #define BOUTON_13 0xFD30CF
    #define BOUTON_14 0xFDB04F
    #define BOUTON_15 0xFD708F
    #define BOUTON_16 0xFD08F7
    #define BOUTON_17 0xFD8877
    #define BOUTON_18 0xFD48B7
    #define BOUTON_19 0xFD28D7
    #define BOUTON_20 0xFDA857
    #define BOUTON_21 0xFD6897
    #define BOUTON_22 0xFD18E7
    #define BOUTON_23 0xFD9867
    #define BOUTON_24 0xFD58A7
    
    
    Stepper moteur(nombre_de_pas, 10, 11, 12, 13);
    IRrecv irrecv(receiver);
    decode_results results;
    
    void decoupeGateau(int nombre_parts); //rotation du plateau un seul part sur Parts
    void translationChariot(); // le moteur fait une descente puis il monte
    void monte(); // un moteur entraîne un chariot qui monte
    void descend(); // le moteur tourne dans l'autre sens ; le chariot dessend
    void stop(); // le moteur ne tourne pas ; le chariot est immobile
    
    
    void setup()
    {
    	irrecv.enableIRIn();	// initialisation du recepteur Ir
    	moteur.setSpeed(30);	// initialisation du RPM du moteur p_a_p
    
    	//initialisation des sorties du moteur de trabsalation H/B
    	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);
    
    	// si au debut on est entre les deux capteur donc on monte et arret sur F_C_H
    	if (!CapteurHautOn && !CapteurBasOn) monte();
    
    	// Mettre la broche Enable a high comme ca le moteur tourne
    	digitalWrite(enablePin, HIGH);
    }
    
    
    void loop()
    {
    	if (irrecv.decode(&results)) {
    		switch (results.value)
    		{
    			case BOUTON_4:
    			decoupeGateau(4);
    			break;
    
    			case BOUTON_5:
    			decoupeGateau(5);
    			break;
    
    			case BOUTON_6:
    			decoupeGateau(6);
    			break;
    
    			case BOUTON_7:
    			decoupeGateau(7);
    			break;
    
    			case BOUTON_8:
    			decoupeGateau(8);
    			break;
    
    			case BOUTON_9:
    			decoupeGateau(9);
    			break;
    
    			case BOUTON_10:
    			decoupeGateau(10);
    			break;
    
    			case BOUTON_11:
    			decoupeGateau(11);
    			break;
    
    			case BOUTON_12:
    			decoupeGateau(12);
    			break;
    
    			case BOUTON_13:
    			decoupeGateau(13);
    			break;
    
    			case BOUTON_14:
    			decoupeGateau(14);
    			break;
    
    			case BOUTON_15:
    			decoupeGateau(15);
    			break;
    
    			case BOUTON_16:
    			decoupeGateau(16);
    			break;
    
    			case BOUTON_17:
    			decoupeGateau(17);
    			break;
    
    			case BOUTON_18:
    			decoupeGateau(18);
    			break;
    
    			case BOUTON_19:
    			decoupeGateau(19);
    			break;
    
    			case BOUTON_20:
    			decoupeGateau(20);
    			break;
    
    			case BOUTON_21:
    			decoupeGateau(21);
    			break;
    
    			case BOUTON_22:
    			decoupeGateau(22);
    			break;
    
    			case BOUTON_23:
    			decoupeGateau(23);
    			break;
    
    			case BOUTON_24:
    			decoupeGateau(24);
    			break;
    		}
    	}
    	irrecv.resume(); // Receive the next value
    }
    
    //monte jusqu'au  fin de course haut
    void monte() // un moteur entraîne un chariot qui monte
    {
    	while (!CapteurHautOn) {
    		digitalWrite(motor1Pin1, LOW); // mettre pin 2 a 293D low
    		digitalWrite(motor1Pin2, HIGH); // mettre pin 7 a L293D high
    	}
    	stop();
    }
    
    //descend jusqu'au  fin de course bas
    void descend() // le moteur tourne dans l'autre sens ; le chariot dessend
    {
    	while (!CapteurBasOn) {
    		digitalWrite(motor1Pin1, HIGH); // Mettre pin 2 a L293D high
    		digitalWrite(motor1Pin2, LOW); // Mettre pin 7 a L293D low
    	}
    	stop();
    }
    
    // le moteur ne tourne pas ; le chariot est immobile
    void stop()
    {
    	digitalWrite(motor1Pin1, LOW); // Mettre pin 2 a L293D low
    	digitalWrite(motor1Pin2, LOW); // Mettre pin 7 a L293D low
    	delay(500);
    }
    
    // le moteur fait une descente puis il monte
    void translationChariot()
    {
    	descend();
    	monte();
    }
    
    //decoupe le guateau sur nombre_parts 
    void decoupeGateau(int nombre_parts)
    {
    	for (int i = 0; i < nombre_parts; i++) //decoupe le guateau sur  nombre_parts
    	{
    		moteur.step(nombre_de_pas / nombre_parts); // rotation du plateau d'un part sur 4
    		translationChariot(); //decoupe le gateau: une descente puis une monté et stop
    	}
    
    }

  22. #17
    invite49040884

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    Oui j'essaie ^^

  23. #18
    invite49040884

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    Lorsque je met la carte sous tension, le chariot monte puis... il stop enfin arrivé en haut ! par contre, revers de la médaille, rien ne se passe lorsque j'appuie sur un des boutons. Le programme est pourtant savamment construit ! Je ne vois pas ce que l'on peu faire maintenant, j'ai tester la télécommande infrarouge pour par exemple faire tourner le moteur pas-à-pas et ça fonctionne pourtant !

  24. Publicité
  25. #19
    mkh.mourad

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    Tu es sûr de tes codes infrarouge? Comment tu as eu ces codes?
    Chaque télécommande a ses propres codes! Tu peux utiliser n'importe quelle télécommande même celle de ta Tv.

  26. #20
    invite49040884

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    Par exemple ce programme permet que lorsque j'appuie sur la touche "1" de la télécommande la moteur effectue 40 pas puis s'arrête une seconde, durant dix fois :

    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;
    
    void setup()
    {
      irrecv.enableIRIn();
      moteur.setSpeed(15);
    } 
    
    
    void translateIR()
    {
      switch(results.value)
    
      {
    
      case 0xFD00FF: 
    for(int i=0; i<10; i++)
    {
    moteur.step(40);
    delay(1000);
    }
        break;
        
      default: {}
      break;
      }// End Case
    
    
    }
    
    void loop()
    {
      if (irrecv.decode(&results)) // savoir si signal reçu
    
      {
        translateIR(); 
        irrecv.resume();
      }
      
    }

  27. #21
    mkh.mourad

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    pour voir ce que ta télécommande envoie comme code:

    Code:
    #include <IRremote.h>
    
    int RECV_PIN = 4;
    
    IRrecv irrecv(RECV_PIN);
    
    decode_results results;
    
    void setup()
    {
      Serial.begin(9600);
      irrecv.enableIRIn(); // Start the receiver
    }
    
    void loop() {
      if (irrecv.decode(&results)) {
        Serial.print("0x");
        Serial.println(results.value, HEX);
        irrecv.resume(); // Receive the next value
      }
    }
    tu ouvres le terminal pour voir le code hexadécimal associé a chaque bouton pressé pour comparer.

  28. #22
    invite49040884

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    Bah ça je l'ai fais dès le départ (depuis longtemps) pour en tirer :

    4 - FD00FF
    5 - FD807F
    6 - FD40BF
    7 - FD20DF

    8 - FDA05F
    9 - FD609F
    10 - FD10EF
    11 - FD906F
    12 - FD50AF
    13 - FD30CF
    14 - FDB04F
    15 - FD708F
    16 - FD08F7
    17 - FD8877
    18 - FD48B7
    19 - FD28D7
    20 - FDA857
    21 - FD6897
    22 - FD18E7
    23 - FD9867
    24 - FD58A7

  29. #23
    mkh.mourad

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    CETTE FOIS CA SERAI LA DERNIERE

    Code:
    #include "IRremote.h"
    #include <Stepper.h>
    
    
    #define receiver 5 // reception module IR sur pin 5
    #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
    #define nombre_de_pas 200
    
    // codes des boutons de la telecommande IR
    #define BOUTON_4 0xFD00FFL
    #define BOUTON_5 0xFD807FL
    #define BOUTON_6 0xFD40BFL
    #define BOUTON_7 0xFD20DFL
    #define BOUTON_8 0xFDA05FL
    #define BOUTON_9 0xFD609FL
    #define BOUTON_10 0xFD10EFL
    #define BOUTON_11 0xFD906FL
    #define BOUTON_12 0xFD50AFL
    #define BOUTON_13 0xFD30CFL
    #define BOUTON_14 0xFDB04FL
    #define BOUTON_15 0xFD708FL
    #define BOUTON_16 0xFD08F7L
    #define BOUTON_17 0xFD8877L
    #define BOUTON_18 0xFD48B7L
    #define BOUTON_19 0xFD28D7L
    #define BOUTON_20 0xFDA857L
    #define BOUTON_21 0xFD6897L
    #define BOUTON_22 0xFD18E7L
    #define BOUTON_23 0xFD9867L
    #define BOUTON_24 0xFD58A7L
    
    
    Stepper moteur(nombre_de_pas, 10, 11, 12, 13);
    IRrecv irrecv(receiver);
    decode_results results;
    
    void decoupeGateau(int nombre_parts); //rotation du plateau un seul part sur Parts
    void translationChariot(); // le moteur fait une descente puis il monte
    void monte(); // un moteur entraîne un chariot qui monte
    void descend(); // le moteur tourne dans l'autre sens ; le chariot dessend
    void stop(); // le moteur ne tourne pas ; le chariot est immobile
    
    
    void setup()
    {
    	irrecv.enableIRIn();	// initialisation du recepteur Ir
    	moteur.setSpeed(30);	// initialisation du RPM du moteur p_a_p
    
    	//initialisation des sorties du moteur de trabsalation H/B
    	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);
    
    	// si au debut on est entre les deux capteur donc on monte et arret sur F_C_H
    	if (!CapteurHautOn && !CapteurBasOn) monte();
    
    	// Mettre la broche Enable a high comme ca le moteur tourne
    	digitalWrite(enablePin, HIGH);
    }
    
    
    void loop()
    {
    	if (irrecv.decode(&results)) {
    
    		if (results.value == BOUTON_4) {
    			decoupeGateau(4);
    		}
    
    		if (results.value == BOUTON_5) {
    			decoupeGateau(5);
    		}
    
    		if (results.value == BOUTON_6) {
    			decoupeGateau(6);
    		}
    
    		if (results.value == BOUTON_7) {
    			decoupeGateau(7);
    		}
    
    		if (results.value == BOUTON_8) {
    			decoupeGateau(8);
    		}
    
    		if (results.value == BOUTON_9) {
    			decoupeGateau(9);
    		}
    
    		if (results.value == BOUTON_10) {
    			decoupeGateau(10);
    		}
    
    		if (results.value == BOUTON_11) {
    			decoupeGateau(11);
    		}
    
    		if (results.value == BOUTON_12) {
    			decoupeGateau(12);
    		}
    
    		if (results.value == BOUTON_13) {
    			decoupeGateau(13);
    		}
    
    		if (results.value == BOUTON_14) {
    			decoupeGateau(14);
    		}
    
    		if (results.value == BOUTON_15) {
    			decoupeGateau(15);
    		}
    
    		if (results.value == BOUTON_16) {
    			decoupeGateau(16);
    		}
    
    		if (results.value == BOUTON_17) {
    			decoupeGateau(17);
    		}
    
    		if (results.value == BOUTON_18) {
    			decoupeGateau(18);
    		}
    
    		if (results.value == BOUTON_19) {
    			decoupeGateau(19);
    		}
    
    		if (results.value == BOUTON_20) {
    			decoupeGateau(20);
    		}
    
    		if (results.value == BOUTON_21) {
    			decoupeGateau(21);
    		}
    
    		if (results.value == BOUTON_22) {
    			decoupeGateau(22);
    		}
    
    		if (results.value == BOUTON_23) {
    			decoupeGateau(23);
    		}
    
    		if (results.value == BOUTON_24) {
    			decoupeGateau(24);
    		}
    	}
    	irrecv.resume(); // Receive the next value
    }
    
    //monte jusqu'au  fin de course haut
    void monte() // un moteur entraîne un chariot qui monte
    {
    	while (!CapteurHautOn) {
    		digitalWrite(motor1Pin1, LOW); // mettre pin 2 a 293D low
    		digitalWrite(motor1Pin2, HIGH); // mettre pin 7 a L293D high
    	}
    	stop();
    }
    
    //descend jusqu'au  fin de course bas
    void descend() // le moteur tourne dans l'autre sens ; le chariot dessend
    {
    	while (!CapteurBasOn) {
    		digitalWrite(motor1Pin1, HIGH); // Mettre pin 2 a L293D high
    		digitalWrite(motor1Pin2, LOW); // Mettre pin 7 a L293D low
    	}
    	stop();
    }
    
    // le moteur ne tourne pas ; le chariot est immobile
    void stop()
    {
    	digitalWrite(motor1Pin1, LOW); // Mettre pin 2 a L293D low
    	digitalWrite(motor1Pin2, LOW); // Mettre pin 7 a L293D low
    	delay(500);
    }
    
    // le moteur fait une descente puis il monte
    void translationChariot()
    {
    	descend();
    	monte();
    }
    
    //decoupe le guateau sur nombre_parts
    void decoupeGateau(int nombre_parts)
    {
    	for (int i = 0; i < nombre_parts; i++) //decoupe le guateau sur  nombre_parts
    	{
    		moteur.step(nombre_de_pas / nombre_parts); // rotation du plateau d'un part sur 4
    		translationChariot(); //decoupe le gateau) { une descente puis une monté et stop
    	}
    }

  30. #24
    invite49040884

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    Je vais tester en espérant que ça marche (sinon je verrai bien) ; merci de vous être tant tracassé pour cela

  31. Publicité
  32. #25
    mkh.mourad

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    Parce qu'il y avait un petit bug dans mon code sur les switch/case qui n'acceptait pas de long int. En plus de la déclaration des constantes des codes infrarouge de boutons.
    De préférence tu modifis chaque linge comme celle la:
    #define BOUTON_21 0xFD6897L
    Ajoutes un double zero apres les 0x, et finis la ligne par un UL au lieu de L

    #define BOUTON_21 0x00FD6897UL

    Bonne chance.

  33. #26
    invite49040884

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    Bonne NOUVELLE !!! j'ai fais comme vous l'avez prescrit, mais... ça ne marchais pas j'ai alors enlevé le "irrecv.resume(); // Receive the next value" pensant qu'il n'y avais pas d'autre valeur à rentrer une fois le processus de coupe déclenché. Et : ça marche ! enfin, presque. En fait, c'est bizarre, il faut appuyer sur le bouton voulu lorsque le chariot monte (dans le setup), puis encore une fois qu'il est en haut pour lancé le processus. Sinon si on appuie sur le bouton voulu que lorsque le chariot est en haut ça ne fait rien. Je pense qu'il y a un rapport avec le setup, c'est bizarre mais enfin, ma machine est indépendante de l'ordi ; je suis plus que content ! merci ^^ en plus, à observer la structure du programme, je progresse

  34. #27
    mkh.mourad

    Re : Programme Arduino - quand la logique n'est pas logique_Help me please !

    Heureux pour toi que ça fonctionne.
    Tu aimes toujours enlever quelques lignes qui te met en confusion. Lool.
    Tu dois prendre en consideration que des fonctions dans le code sont bloquantes, cad que le programme ne reponds a aucune commande extérieur tant qu'il n'a pas fini la tâche courante.
    Par exemple, la fonction decoupeGateau() prends du temp pour faire descendre le chariot, le faire monter, et tourner le plateau. Pendant tous ce temps le microcontroleur est occupé pour exécuter cette tache, et il ne peut répondre a une commande infrarouge.
    En résumé, c'est au repos, quand le chariot est position monté, que tu peux donner une commande IR.

Discussions similaires

  1. programme de language arduino
    Par avions6 dans le forum Électronique
    Réponses: 4
    Dernier message: 25/02/2014, 07h29
  2. [ARDUINO ∞] Vérification de programme.
    Par Linke741 dans le forum Électronique
    Réponses: 12
    Dernier message: 14/01/2014, 21h33
  3. Programme sur Arduino
    Par yhyh dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 22/02/2013, 22h36
  4. Etat logique avec courant DC-4CH + Arduino
    Par Jerome_p dans le forum Électronique
    Réponses: 3
    Dernier message: 25/03/2012, 16h56
  5. programme gestion led avec arduino
    Par axel_67 dans le forum Électronique
    Réponses: 4
    Dernier message: 03/01/2012, 17h29
Découvrez nos comparatifs produits sur l'informatique et les technologies.