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 :

Problème de fusion de programme


Sujet :

Arduino

  1. #1
    Candidat au Club
    Homme Profil pro
    carrossier
    Inscrit en
    Février 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : carrossier

    Informations forums :
    Inscription : Février 2022
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Problème de fusion de programme
    Bonjour à tous
    Je vous explique mon problème (je précise que je suis débutant en Arduino)
    Voila, j'ai voulu motoriser ma monture télescope avec un moteur pas à pas.
    Il a fallu faire un programme Arduino (Uno) pour déterminer la vitesse de suivi des astres à observer (avec boutons marche ; arret ;accel ; frein du moteur).
    Cela a bien fonctionné et j'ai donc voulu par la suite motoriser la mise au point (mon focus) de mon télescope , de la même manière que précédemment.

    Les deux programmes fonctionne très bien séparément mais il faudrait les fusionner .
    J'ais donc essayé mais il m'arrive un souci (avec les deux programme fusionner).
    Quand je lance mon moteur de suivi, aucun problème, mais je ne peux pas faire la mise au point sans freiner les deux moteurs. Idem dans le sens contraire.
    Pour faire simple je ne peux pas faire tourner mes deux moteurs en même temps, mais un par un oui. Et c'est un problème.
    Et je n'arrive pas à trouver pourquoi
    pourtant mon câblage a été vérifié revérifié correctement

    voici le programme fusionné en question
    (je reprécise que je suis débutant)

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    // zoom
    #define zoomDirPin 2
    #define zoomStepPin 3    
    #define boutonZoomInPin 10
    #define boutonZoomOutPin 11
    #define tempoZoom 500
    bool zoom = false;
     
    // suivi
    #define suiviDirPin 4
    #define suiviStepPin 5    
    #define boutonAccelererPin 6    
    #define boutonRalentirPin 7
    #define boutonMarchePin 8
    #define boutonArretPin 9
    #define normal 2080
    #define rapide 1580
    #define lent 2780
     
    int tempo;
     
    void setup() {
      pinMode(zoomDirPin, OUTPUT);
      pinMode(zoomStepPin, OUTPUT);
      pinMode(suiviDirPin, OUTPUT);
      pinMode(suiviStepPin, OUTPUT);
      pinMode(boutonZoomInPin, INPUT_PULLUP);  // L'autre cote du bouton au GND
      pinMode(boutonZoomOutPin, INPUT_PULLUP);   //         "        "        "
      pinMode(boutonAccelererPin,INPUT_PULLUP);  // L'autre cote du bouton au GND
      pinMode(boutonRalentirPin, INPUT_PULLUP);   //         "        "        "
      pinMode(boutonMarchePin, INPUT_PULLUP);
      pinMode(boutonArretPin, INPUT_PULLUP);
    }
     
    void loop() {
     
        if (digitalRead(boutonAccelererPin) == LOW)      // Si le bouton accelerer est pressé
          tempo = rapide;
        else if (digitalRead(boutonRalentirPin) == LOW)  // Si le bouton freiner est pressé
          tempo = lent;
        else if (digitalRead(boutonMarchePin) == LOW)    // Si le bouton marche est pressé
          tempo = normal;
        else if (digitalRead(boutonArretPin) == LOW)     // Si le bouton arrêt est pressé
          tempo = 0;
     
        if (tempo > 0) {
          digitalWrite(suiviStepPin, LOW);
          delayMicroseconds(tempo);
          digitalWrite(suiviStepPin, HIGH);
          delayMicroseconds(tempo);
        }
        if (zoom > 0 )  {
          digitalWrite(zoomStepPin, LOW);
          delayMicroseconds(tempoZoom);
          digitalWrite(zoomStepPin, HIGH);
          delayMicroseconds(tempoZoom);
          zoom = false;
        }
        if (digitalRead(boutonZoomInPin) == LOW) {     // Si le bouton Zoom In est presse
          digitalWrite(zoomDirPin, LOW);
          zoom = true;
        } else if (digitalRead(boutonZoomOutPin) == LOW) {  // Si le bouton Zoom Out est presse
          digitalWrite(zoomDirPin, HIGH);
          zoom = true;
        }
     
     
    }
    où serait le problème svp ?

  2. #2
    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
    Citation Envoyé par victorien18 Voir le message
    mais je ne peux pas faire la mise au point sans freiner les deux moteurs
    ce qui fait faire un pas à votre moteur c'est cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          digitalWrite(suiviStepPin, LOW);
          delayMicroseconds(tempo);
          digitalWrite(suiviStepPin, HIGH);
          delayMicroseconds(tempo);
    vous activez une pin, attendez un peu sans rien faire d'autre, puis la désactivez et attendez un peu à nouveau

    la loop tournant très vite, cela se répète et vous avez un mouvement

    le soucis c'est quand vous faites cela deux fois et que vous rajoutez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          digitalWrite(zoomStepPin, LOW);
          delayMicroseconds(tempoZoom);
          digitalWrite(zoomStepPin, HIGH);
          delayMicroseconds(tempoZoom);
    pendant l'attente effectuée ici rien ne se passe pour l'autre moteur et donc forcément il ralentit.

    vous devez faire un code non bloquant (en utilisant micros()) ou prendre une bibliothèque qui sait gérer cela pour vous comme AccelStepper

  3. #3
    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
    Bonsoir victorien18

    Il faut utiliser une bibliothèque comme AccelStepper et ses fonctions non bloquantes comme move() et moveTo() (associées à run() ).
    Ainsi tu pourra facilement faire fonctionner 2 moteurs en même temps.

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

  4. #4
    Candidat au Club
    Homme Profil pro
    carrossier
    Inscrit en
    Février 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : carrossier

    Informations forums :
    Inscription : Février 2022
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par jpbbricole Voir le message
    Il faut utiliser une bibliothèque comme AccelStepper et ses fonctions non bloquantes comme move() et moveTo() (associées à run() ).
    Ainsi tu pourra facilement faire fonctionner 2 moteurs en même temps.

    alors j'ais instaler AccelStepper
    je l'ais inclut au debut du programme
    ce qui donne
    Code Arduino : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <AccelStepper.h>
    #include <MultiStepper.h>

    mais pour les autre fonction comme move moveTo associées a run
    je les met dans cette portion de programme ?
    Code Arduino : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     if (tempo > 0) {
          digitalWrite(suiviStepPin, LOW);
          delayMicroseconds(tempo);
          digitalWrite(suiviStepPin, HIGH);
          delayMicroseconds(tempo);
        }
        if (zoom > 0 )  {
          digitalWrite(zoomStepPin, LOW);
          delayMicroseconds(tempoZoom);
          digitalWrite(zoomStepPin, HIGH);
          delayMicroseconds(tempoZoom);

  5. #5
    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
    regardez comment fonctionnent les exemples fournis avec la bibliothèque, ça vous donnera une idée. Il faut reprendre le code pour l'adapter

  6. #6
    Candidat au Club
    Homme Profil pro
    carrossier
    Inscrit en
    Février 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : carrossier

    Informations forums :
    Inscription : Février 2022
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Jay M Voir le message
    regardez comment fonctionnent les exemples fournis avec la bibliothèque, ça vous donnera une idée. Il faut reprendre le code pour l'adapter
    oui mais du coup , il faut tout refaire le programme ?
    retour a zero ?

  7. #7
    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
    Citation Envoyé par victorien18 Voir le message
    il faut tout refaire le programme ?
    Oui, bien sûr l’approche est différente.cela dit c’est pas comme si vous aviez 10,000 lignes de code à reprendre…

  8. #8
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 329
    Points : 4 146
    Points
    4 146
    Par défaut Règle 1 : pas plus de lignes que de doigts
    Bonjour Jay,

    Citation Envoyé par Jay M Voir le message
    ...cela dit c’est pas comme si vous aviez 10,000 lignes de code à reprendre…
    Tu es dur, il y quand même une 40e de lignes de code à reprendre

    Je me souviens de projets de quelques millions de lignes créés et gérés avec des outils un peu moins élaborés que ceux d'aujourd'hui. Le bon temps ?

    Salut
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

Discussions similaires

  1. [Forms]Problème de fusion avec oracle forms 6i
    Par Sabact dans le forum Forms
    Réponses: 2
    Dernier message: 25/10/2006, 07h50
  2. Problème de fusion de ACCESS 9.0 vers WORD 2003
    Par kristal_972 dans le forum Access
    Réponses: 2
    Dernier message: 12/07/2006, 20h16
  3. Problème pour faire un programme
    Par Kypper_667 dans le forum C++
    Réponses: 4
    Dernier message: 26/06/2006, 18h53
  4. petit problème de sortie de programme
    Par clampin dans le forum C
    Réponses: 2
    Dernier message: 17/06/2006, 11h51
  5. Problème d'execution du programme
    Par black is beautiful dans le forum Windows
    Réponses: 1
    Dernier message: 31/03/2006, 21h24

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