[Programmation] Arduino, faire un va et vient du servomoteur
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Arduino, faire un va et vient du servomoteur



  1. #1
    anthonydu62

    Arduino, faire un va et vient du servomoteur


    ------

    Bonjour à toutes et tous.
    Voila, je début avec Arduino, c'est sympa comme truc

    Donc je suis ici avec un servomoteur:
    J'arrive à le faire bouger, y mettre des tempo...

    Maintenant je bloque sur un truc.
    Je voudrais que mon servomoteur face:

    Signal d'entrée "OK" sur le pin 2
    au départ il est en position "0"
    il va en position "1"
    revienne en position "0"
    et reparte en position "1"
    Signal d'entrée "non OK" sur le pin 2
    revienne en position "0"

    Voici mon programme:


    Code:
    #include <Servo.h>
    Servo myservo;
    int angle =0;
    int angleStep =50;
    
    
    void setup() { 
      myservo.attach(7);  //servo pin
      pinMode(2,INPUT_PULLUP); //ir out pin
    }
    
    void loop() {
      if (digitalRead(2) == HIGH){
          myservo.write(-50);
          delay (300);
          myservo.write(50);
         delay (300);
         myservo.write(-50);
         delay (300);
         myservo.write(50);
      }
    else {
         myservo.write(50);
      }
    }
    Le problème c'est que temps que j'ai mon signal d'entrée, il fait que des va et vient sans s’arrêter.
    Avez vous une idée de comment faire?

    -----
    Dernière modification par Antoane ; 11/11/2020 à 11h12. Motif: Ajout balises code

  2. #2
    Antoane
    Responsable technique

    Re : Arduino, faire un va et vient du servomoteur

    Bonjour,

    Une solution consiste à utiliser une variable servant de mémoire (machine à état) :
    - si chien == 0 : on est en position d'attente (0) que le bouton soit pressé
    - si chien == 1 : on fait les aller-retours
    - si chien == 2 : on est en position d'attente (1) que le bouton soit relaché

    Quelque chose comme ça devrait faire l'affaire :
    Code:
    #include <Servo.h>
    Servo myservo;
    int angle =0;
    int chien = 0;
    int angleStep =50;
    
    
    void setup() { 
      myservo.attach(7);  //servo pin
      pinMode(2,INPUT_PULLUP); //ir out pin
    }
    
    void loop() {
       if (digitalRead(2) == HIGH && chien == 0){ chien = 1; }
       if(chien == 1)
          myservo.write(-50);
          delay (300);
          myservo.write(50);
         delay (300);
         myservo.write(-50);
         delay (300);
         myservo.write(50);
         chien = 2 ;
       }
       if(digitalRead(2) == LOW && chien == 2){
         chien = 0 ;
         myservo.write(50);
       }
    }
    Je ne code pas en arduino, il peut donc y avoir des erreurs de syntaxe. Je code peu pour µC, il y a donc probablement de meilleures implémentations (e.g. avec une vraie machine à état et un switch).
    Dernière modification par Antoane ; 14/11/2020 à 09h23.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  3. #3
    MathSACO

    Re : Arduino, faire un va et vient du servomoteur

    Bonjour.

    Tu peux également tester le passage à 1 de ton entrée en le comparant avec l'état précédent, ce qui revient au même que la solution proposée plus tôt :

    Code:
    #include <Servo.h>
    
    Servo myservo;
    int angle =0;
    int angleStep =50;
    int anciennePosition=0; // Un boolean aurait pu être utilisé, mais les deux utilisent la même quantité de mémoire.
    
    void setup() { 
      myservo.attach(7);  //servo pin
      pinMode(2,INPUT_PULLUP); //ir out pin
    }
    
    void loop() {
      if (digitalRead(2) == HIGH) {
        if(anciennePosition==0){
          anciennePosition=1;
          myservo.write(-50);
          delay (300);
          myservo.write(50);
          delay (300);
          myservo.write(-50);
          delay (300);
          myservo.write(50);
        }
      }
      else {
        anciennePosition=0;
        myservo.write(50);  // pourrait éventuellement être déplacé à la fin du setup s'il s'agit de l'état de repos du servo
      }
    }

  4. #4
    anthonydu62

    Re : Arduino, faire un va et vient du servomoteur

    Merci pour le coup de pouce, il est vrai qu'en ajoutant une variable, la solution saute au yeux.

  5. A voir en vidéo sur Futura

Discussions similaires

  1. [Programmation] Arduino et servomoteur pas à pas
    Par maigrot64 dans le forum Électronique
    Réponses: 1
    Dernier message: 30/04/2020, 11h31
  2. arduino + servomoteur demandant de la puissance
    Par invite6cee3d77 dans le forum Électronique
    Réponses: 4
    Dernier message: 12/03/2015, 15h38
  3. [Arduino] Moteur ou servomoteur ?
    Par harchi01 dans le forum Électronique
    Réponses: 6
    Dernier message: 07/03/2015, 09h58
  4. Servomoteur à 2x6 fils et arduino
    Par invite05473b44 dans le forum Électronique
    Réponses: 5
    Dernier message: 27/11/2014, 15h49
  5. Réponses: 1
    Dernier message: 09/02/2013, 17h50
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...