IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Faire bouger deux servomoteurs grâce à une télécommande RF


Sujet :

Arduino

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2022
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Faire bouger deux servomoteurs grâce à une télécommande RF
    Bonjour tout le monde !

    Je suis nouveau dans le monde de l'Arduino et jusqu'ici j'ai réussi a me débrouiller avec des tuto's mais pour le coups j'aurais besoin d'aide concernant le code ci-dessous.

    Je vous explique le projet : Mon but est de faire bouger les deux moteurs servo grace a une télécommande RF. si j'appui sur A le servo1 bouge , Si j'appui sur B le servo2 bouge et si j'appui sur C les deux servos bougent.


    Problème : j'ai utiliser la fonction IF afin de faire comprendre a l'Arduino que chaque action est indépendant et
    ne doivent pas suivre un ordre (A puis B puis C). Pour le moment quand j'appui sur le bouton A, le servo 1 bouge et quand j'appui sur le bouton B le servo2 bouge. jusqu'ici tout va bien! le problème est que une fois que j'ai appuyé sur A une fois, le bouton A ne remarche plus et il n'y a que le bouton B qui marche.
    Comment cela se fait-il et comment puis-je y remédier ?

    Merci d'avances aux personnes qui prendront le temps de lire mon post et de m'aider


    CODE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #include <Servo.h>
     
    Servo myservo1;
    Servo myservo2; 
    // create servo object to control a servo
    // twelve servo objects can be created on most boards
     
    int pos = 0;    // variable to store the servo position
     
    void setup() {
      myservo1.attach(9);// attaches the servo on pin 9 to the servo object
      myservo2.attach(3); // attaches the servo on pin 3 to the servo object
    }
     
    void loop () {
     while (digitalRead(6) == LOW ) {
       for (pos = 0; pos <= 0; pos += 1) { 
        // in steps of 1 degree
        myservo1.write(pos);              // tell servo to go to position in variable 'pos'
     }  
     
     if (digitalRead(6) == HIGH) {  // Button A pressed
         for (pos = 15; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
        // in steps of 1 degree
        myservo1.write(pos);              // tell servo to go to position in variable 'pos'
        delay(15);                       // waits 15 ms for the servo to reach the position
      }
      for (pos = 180; pos >= 15; pos -= 1) { // goes from 180 degrees to 0 degrees
        myservo1.write(pos);              // tell servo to go to position in variable 'pos'
        delay(15);                       // waits 15 ms for the servo to reach the position;
      }
     
     
     while (digitalRead(5) == LOW ) {
       for (pos = 0; pos <= 0; pos += 1) { 
        // in steps of 1 degree
        myservo2.write(pos);              // tell servo to go to position in variable 'pos'
     }  
     
    if (digitalRead(5) == HIGH) {  // Button C pressed
         for (pos = 15; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
        // in steps of 1 degree
        myservo2.write(pos);              // tell servo to go to position in variable 'pos'
        delay(15);                       // waits 15 ms for the servo to reach the position
      }
      for (pos = 180; pos >= 15; pos -= 1) { // goes from 180 degrees to 0 degrees
        myservo2.write(pos);              // tell servo to go to position in variable 'pos'
        delay(15);                       // waits 15 ms for the servo to reach the position;
       }
      } 
      } 
      }
    }
    }

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 647
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 647
    Points : 11 136
    Points
    11 136
    Par défaut
    Bonjour,

    tes conditions sont dans des boucles while() et je n'arrive pas à comprendre comment elles peuvent s'exécuter. La condition du while étant opposée à celle du if.
    Je crois que tu as un souci dans l'imbrication de tes différentes étapes.
    Ceci dit, je pense que tu peux te passer des while() dans la mesure où loop() est elle-même une boucle.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2022
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour
    Merci de ta réponse.
    alors j'ai essayé en enlevant les conditions "While" mais le problème c'est que maintenant le servo 2 (bouton B) ne marche même plus.
    J'ai essayé aussi en mettant une condition "and" entre les deux étapes (bouton A et B) mais sans succès.

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    tout le code de la loop est dans le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     while (digitalRead(6) == LOW ) {
    ils sont sur quelles borches les boutons A et B. ??

    (le plus simple serait d'utiliser une bibliothèque qui gère les boutons)

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2022
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Les boutons de télécommande RF sont connectés aux pins 5 (A) et 6 (B).

  6. #6
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    votre loop() ressemble à cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void loop () {
      while (digitalRead(6) == LOW ) {
        // des trucs ici
      }
    }
    donc vous ne testez jamais la broche 5 si la 6 n'est pas appuyée (en supposant que vous avez des pullup-externes sur les pins 5 et 6)

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2022
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Aaah d'accord et donc je dois rajouter une "void loop" ou je dois juste décaler ma "}" ?
    Merci beaucoup

  8. #8
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    A quoi sert le while ?

    La loop se charge se répéter un code

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2022
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #include <Servo.h>
     
    Servo myservo1;
    Servo myservo2; 
    // create servo object to control a servo
    // twelve servo objects can be created on most boards
     
    int pos = 0;    // variable to store the servo position
     
    void setup() {
      myservo1.attach(9);// attaches the servo on pin 9 to the servo object
      myservo2.attach(3); // attaches the servo on pin 3 to the servo object
    }
     
    void loop () { 
      while (digitalRead(6) == LOW and digitalRead(5) == LOW)
     
       for (pos = 0; pos <= 0; pos += 1) { 
        // in steps of 1 degree
        myservo1.write(pos); myservo2.write(pos)     // tell servo to go to position in variable 'pos'
     ;}  
     
     while (digitalRead(6) == HIGH);{   // Button A pressed
         for (pos = 15; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
        // in steps of 1 degree
        myservo1.write(pos);              // tell servo to go to position in variable 'pos'
        delay(15);                       // waits 15 ms for the servo to reach the position
      }
      for (pos = 180; pos >= 15; pos -= 1) { // goes from 180 degrees to 0 degrees
        myservo1.write(pos);              // tell servo to go to position in variable 'pos'
        delay(15);                       // waits 15 ms for the servo to reach the position;
      }
      }
     
    while (digitalRead(5) == HIGH);{  // Button C pressed
         for (pos = 15; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
        // in steps of 1 degree
        myservo2.write(pos);              // tell servo to go to position in variable 'pos'
        delay(15);                       // waits 15 ms for the servo to reach the position
      }
      for (pos = 180; pos >= 15; pos -= 1) { // goes from 180 degrees to 0 degrees
        myservo2.write(pos);              // tell servo to go to position in variable 'pos'
        delay(15);                       // waits 15 ms for the servo to reach the position;
       }
      } 
       }
    Bonjour j'ai re-modifié le code de la sorte en gardant le while car comme la vidéo suivante je cherche à ce qu'il attende le moment où j'appuie sur A ou B ou C avant de lancer un mouvement particulier :


    Cependant en ayant modifié le code de la sorte maintenant l'Arduino ne fait plus la distinction entre le moment où je presse le bouton A et le bouton B... et les lignes se lisent automatiquement : dès que j'appuie les deux Arduino bougent l'un après l'autre.

    Quelqu'un a une solution ou peut m'aider à la trouver ?

  10. #10
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 012
    Points : 2 341
    Points
    2 341
    Par défaut
    Bonjour gaman2000
    Citation Envoyé par gaman2000 Voir le message
    dès que j'appuie les deux Arduino bougent l'un après l'autre.
    Tu ne peut pas faire autrement avec la bibliothèque Servo.h, la fonction .write(pos) est dite bloquante, c'est à dire que tu ne peut rien faire d'autre pendant ce temps. C'est pour ceci que tes servo fonctionnent l'un après l'autre.
    Si tu veux 2 servo en même temps, utilises la bibliothèque VarSpeedServo, tu verra, ça change la donne, tu peux même régler finement la vitesse, créer des séquences et a les modes bloquant ou non bloquant, regardes l'exemple SweepTwoServos.ino. Ca va te simplifier ton programme.

    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2022
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Wow Merci beaucoup je regarde ça et je reviens vers vous si j'ai d'autres questions !

  12. #12
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2022
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    J'ai trouvé une solution ! merci beaucoup aux personnes m'ayant aiguillé vers le bon chemin

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/04/2010, 16h26
  2. Réponses: 2
    Dernier message: 17/04/2009, 12h13
  3. Faire defiler deux listes avec une scroll bar
    Par mcdelay dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/05/2007, 14h54
  4. Faire bouger les aiguilles d'une horloge
    Par josépha dans le forum Pascal
    Réponses: 4
    Dernier message: 06/05/2007, 00h38
  5. Problème pour faire bouger deux objets simultanement
    Par LinuxUser dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 22/04/2007, 23h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo