Partage
  • Partager sur Facebook
  • Partager sur Twitter

Contrôle moteur pas à pas avec bouton poussoir

Sujet résolu
    9 mai 2018 à 23:22:39

    Bonjour,

    Etant en pleine réalisation de mon TFE, je suis actuellement bloqué à un endroit.

    Voilà, j'ai créé une petite application avec AppInventor et je l'ai lié à un petit composant bluetooth HC-06 sur mon Arduino. Jusque -là, pas de soucis, j'ai réussi à lui transmettre les infos nécessaires.

    Je possède un moteur pas à pas et j'arrive à communiquer avec mes boutons virtuelles de mon application. Cependant, j'arrive à faire bouger mon moteur pas à pas du nombre de pas que je veux, dans la direction que je veux mais j'aimerais savoir s'il était possible de transmettre l'info que tant que je reste appuyer sur mon bouton virtuel, mon moteur tourne et lorsque je lâche mon bouton, ce dernier s'arrête.

    N.B: Pour pouvoir communiquer avec mon composant bluetooth, mes boutons virtuels envoient des chaines de caractères à mon composant et ces chaines de caractères sont interprétées par mon Arduino. Dans mon cas, mes boutons virtuels sont 2 flèches, une qui va vers le haut & une vers le bas. Tant que je reste appuyé vers le haut, la lettre "h" est envoyée à mon arduino et dès que je lâche mon bouton, la lettre "s" est envoyé pour dire "STOP". En ce qui concerne la fèche du bas, la lettre "b" est envoyé et une fois lachée, la lettre "s" de nouveau.

    #include <SoftwareSerial.h>
    #include <Stepper.h>
    
    SoftwareSerial HC06(11,10);
    const char DOUT_LED = 7;
    String messageRecu;
    
    const int stepsPerRevolution = 6000;
    
    Stepper myStepper(stepsPerRevolution, 2,3);
    
    void setup() {
      Serial.begin(9600);
      HC06.begin(9600);  
      pinMode(DOUT_LED, OUTPUT);
      digitalWrite(DOUT_LED, HIGH);
      myStepper.setSpeed(10);
    }
     
    void loop()
    {
        while(HC06.available())
        {
          char c = HC06.read();
          messageRecu += c;
        }
        if (messageRecu.length() >0)
        {Serial.println(messageRecu);}
          if (messageRecu == "h" && messageRecu != "s")
          {  
            Serial.println("HAUT");
            digitalWrite(DOUT_LED, LOW);
            myStepper.step(2000);
          }
          if (messageRecu == "s")
          {
          Serial.println("STOP");
          digitalWrite(DOUT_LED, HIGH);
          myStepper.step(0);
          }
            
          messageRecu="";
    }


    Etant donné que c'est un langage séquentielle, mon moteur effectue d'abord les 2000 pas, même si je lâche mon bouton virtuel.

    Merci d'avance pour vos réponses.

    -
    Edité par LightBe 9 mai 2018 à 23:41:27

    • Partager sur Facebook
    • Partager sur Twitter
      10 mai 2018 à 0:14:43

      Bonsoir,

      pourquoi ne pas utiliser la méthode setSpeed ?

      • Partager sur Facebook
      • Partager sur Twitter
        23 mai 2018 à 13:52:18

        Bonjour et désolé du retard,

        Je présume que tu veux dire mettre setSpeed(0)? Si oui, j'ai déjà essayé et même résultat car le langage C+ étant séquentiel, tant qu'il n'a pas fini de faire ses pas, il ne veut pas lire l'info du dessous et je pense que c'est tout de même possible de sauter l'étape mais je en sais pas comment ...

        • Partager sur Facebook
        • Partager sur Twitter
          23 mai 2018 à 19:46:58

          LightBe a écrit:

          Bonjour et désolé du retard,

          Je présume que tu veux dire mettre setSpeed(0)? 


          non, pas seulement, n'utiliser que setSpeed() et jamais step
          • Partager sur Facebook
          • Partager sur Twitter
            24 mai 2018 à 17:28:29

            Je ne comprends pas ... Si Je lui transmets juste l'info SetSpeed(), mon moteur ne va jamais tourner, si?
            • Partager sur Facebook
            • Partager sur Twitter
              24 mai 2018 à 20:59:36

              LightBe a écrit:

              Je ne comprends pas ... Si Je lui transmets juste l'info SetSpeed(), mon moteur ne va jamais tourner, si?


              mais non enfin, à chaque fois que l'on a step il faut mettre SetSpeed() avec la valeur adaptée.
              • Partager sur Facebook
              • Partager sur Twitter
                30 mai 2018 à 15:48:40

                Malheureusement, j'ai essayé de faire bouger mon moteur rien qu'avec la fonction SetSpeed() mais il ne bouge pas tant que J'lui transmet pas l'info step ...

                Edit: J'ai trouvé la solution, il me suffisait d'utiliser la fonction "return" afin qu'il lise en permanence les infos que j'lui transmets et j'ai du tout simplement écrire .step(HIGH) pour le faire bouger à ma guise. 

                Merci beaucoup de ton aide en tout cas!

                -
                Edité par LightBe 30 mai 2018 à 16:00:04

                • Partager sur Facebook
                • Partager sur Twitter
                  30 mai 2018 à 16:09:47

                  Salut 

                  SetSpeed permet de régler la vitesse, dans ton cas tu as déjà configurer cette information dans le Setup

                  Pour faire tourner ton moteur tu devra faire appel à la fonction step (ou tu le fait manuellement avec les digitalWrite)

                  Ta question sur le fait que même si tu relâche le bouton le moteur continue de tourner. La solution serait d'utiliser une interruption, tan que la valeur de ton caractère ne change pas tu reste dans le même état  

                  • Partager sur Facebook
                  • Partager sur Twitter
                    31 mai 2018 à 15:55:01

                    Hey!

                    Comme dit précédemment, j'ai trouvé la solution à mon problème (cfr mon EDIT juste au-dessus)

                    Merci pour ton aide en tout cas

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Contrôle moteur pas à pas avec bouton poussoir

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown