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 sur easydriver pendant communication bidirectionnel avec nrf24l01


Sujet :

Arduino

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    beaucoup!!
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : beaucoup!!
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Points : 0
    Points
    0
    Par défaut Problème sur easydriver pendant communication bidirectionnel avec nrf24l01
    bonjours a toutes et a tous, je viens de m'inscrire sur ce forum parce que bien évidement j'ai un problème qui me casse la tête depuis un bon moment , et là j'ai vraiment besoin d'aide avant de devenir tarré!!
    Donc voila j'ai construit un ptit robot qui fonctionne sur une arduino mega 2600, deux petit moteurs a pas genre nema 14 conduit par des easydriver sparkfun et un petit moteur DC conduit par un L298, le tout piloté par une télécommande avec 2 joysticks. 1 pour les steps, un moteur dans l'axe X et un autre sur Y, le deuxième pour le petit DC. La communication se fait avec des nfr24L01.
    Cela marchait très très bien dans le meilleurs des mondes. le problème et survenue quand j'ai ajouté a mon robot un compas pour avoir son azimute et potentiomètre pour avoir le degré d'élévation de son bras, je voulait que les valeurs s'affiche sur ma télécommande via un lcd sur ma télécommande, donc communication bidirectionnel: la télécommande envoie les valeurs de joystick et reçois les valeurs du compas et du potar et l'inverse sur le robot.
    La communication se fait bien mais on dirait que quelque chose entre en conflit avec les deux easydriver et les moteurs ne répondent presque plus genre 1/16 de pas toute les 2 secondes et j'arrive pas a comprendre pourquoi ou si j'ai fait une erreur. est ce que cela viens du code ou des easydrivers ?
    merci d'avance pour ceux qui répondrons

  2. #2
    Membre actif Avatar de cedd70
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Mars 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 154
    Points : 263
    Points
    263
    Par défaut
    Bonjour,Essaye de faire des paragraphes c'est très difficile à lire, (je ne suis pas allé au bout).Je pense que l'on peut faire confiance à Sparkfun de vendre des produits qui fonctionnent. Easydrivers va faire ce que tu lui demandes donc ça vient :- Câblage- HS pour X raison- Soft - Mauvais dimensionnement - etc ..

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    beaucoup!!
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : beaucoup!!
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Points : 0
    Points
    0
    Par défaut
    ok désolé pour les paragraphes, donc en fait non il n'y arien de HS ou mauvais câblage . Car tout marche a la perfection quand je fait une communication simple, c'est a dire quand j'envois les infos des joysticks vers le robot. c'est lorsque que la communication deviens bidirectionnel que ca merde! j'ai juste rajouté un compas et un potentiomètre qui me renvois des valeurs sur la télécommande et la,les driver ne répondent plus c'est étrange!!

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    beaucoup!!
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : beaucoup!!
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Points : 0
    Points
    0
    Par défaut a tout hasard voila les codes qui posent problème
    faut être indulgent je debute....
    code de la télécommande:
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    //bibliotheque telecommande
    #include <SPI.h>
    #include <Mirf.h>
    #include <nRF24L01.h>
    #include <MirfHardwareSpiDriver.h>
    //bibli LCD
    #include <LiquidCrystal.h>
     
    LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
     
    //tableau de valeurs pour joystick, compas, potar
    int valeurs [5];
     
    void setup() {
     
      lcd.begin(16, 2);
     
      Mirf.cePin = 9;
      Mirf.csnPin = 10;
      Mirf.spi = &MirfHardwareSpi;
      Mirf.init();
      Mirf.channel = 1;
      Mirf.payload = sizeof(valeurs);
      Mirf.config(); 
      Mirf.setRADDR((byte *)"clie1");
     
    }
     
     
     
    void loop() {
     
    //j'envoie les valeurs des joystick
     
      valeurs [0] =  analogRead(A0);
      valeurs [1] =  analogRead(A1);
      valeurs [2] =   analogRead(A2);
     
     Mirf.setTADDR((byte *)"serv1");
     Mirf.send((byte *) &valeurs);
     while (Mirf.isSending());
    //je recois les valeurs du compas et du potar
     
    while (!Mirf.dataReady()) {}
    Mirf.getData((byte *) &valeurs);
     
    float heading =  valeurs [3];
    float potDeg =  valeurs [4] * (360.0 / 1023.0);
     
    //affichage sur lcd de l'azimut et des valeurs du potar converties en degré
    if ((heading >= 355) or (heading <= 18))
    { lcd.setCursor(1, 0);
      lcd.print (heading);
      lcd.setCursor(6, 0);
      lcd.print (" D Nord ");
    }
    if ((heading >= 19) and (heading <= 79))
    { lcd.setCursor(1, 0);
      lcd.print (heading);
      lcd.setCursor(6, 0);
      lcd.print (" D Nord-E");
    }
    if ((heading >= 80) and (heading <= 105))
    { lcd.setCursor(1, 0);
      lcd.print (heading);
      lcd.setCursor(6, 0);
      lcd.print(" D Est");
    }
    if ((heading >= 106) and (heading <= 170))
    { lcd.setCursor(1, 0);
      lcd.print (heading);
      lcd.setCursor(6, 0);
      lcd.print ( " D Sud-E");
    }
    if ((heading >= 171) and (heading <= 200))
    { lcd.setCursor(1, 0);
      lcd.print (heading);
      lcd.setCursor(6, 0);
      lcd.print (" D Sud");
    }
    if ((heading >= 201) and (heading <= 255))
    { lcd.setCursor(1, 0);
      lcd.print (heading);
      lcd.setCursor(6, 0);
      lcd.print (" D Sud-O");
    }
    if ((heading >= 256) and (heading <= 280))
    { lcd.setCursor(1, 0);
      lcd.print (heading);
      lcd.setCursor(6, 0);
      lcd.print (" D Ouest");
    }
    if ((heading >= 281) and (heading <= 354))
    { lcd.setCursor(1, 0);
      lcd.print (heading);
      lcd.setCursor(6, 0);
      lcd.print (" D Nord-O");
    }
     
    lcd.setCursor(2, 1);
    lcd.print (potDeg);
    lcd.setCursor(9, 1);
    lcd.print ("Degre");
     
    }

    le robot:
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
     
    // bibliotheque telecomande
    #include <SPI.h>
    #include <Mirf.h>
    #include <nRF24L01.h>
    #include <MirfHardwareSpiDriver.h>
    // bibli pour le compas
    #include <Arduino.h>
    #include <Wire.h>
    #include <HMC5883L_Simple.h>
     
     
     
    // easydriver step_moteur X
    #define step_pinX 5
    #define dir_pinX 4
    #define MS1X 6
    #define SLEEPX 7
    // easydriver step_moteur Y
    #define step_pinY 16
    #define dir_pinY 17
    #define MS1Y 15
    #define SLEEPY 14
    //moteur DC
    #define ENABLE 10
    #define DIRA 8
    #define DIRB 9
    // limite butoir
    #define Limit01 18
    #define Limit02 19
    // objet compas
    HMC5883L_Simple Compass;
     
    int valeurs [5];
     
     
    int step_speedX =10 ; // vitesse: plus le chiffre est haut moins ca va vite
    int step_speedY =1;
     
    void setup() {
     
     
      //step moteur axe X
      pinMode(MS1X, OUTPUT);
      pinMode(dir_pinX, OUTPUT);
      pinMode(step_pinX, OUTPUT);
      pinMode(SLEEPX, OUTPUT);
      //step moteur axe Y
      pinMode(MS1Y, OUTPUT);
      pinMode(dir_pinY, OUTPUT);
      pinMode(step_pinY, OUTPUT);
      pinMode(SLEEPY, OUTPUT);
      // DC moteur mise au point
      pinMode(ENABLE, OUTPUT);
      pinMode(DIRA, OUTPUT);
      pinMode(DIRB, OUTPUT);
      // limite de course pour axe X
      pinMode(Limit01, INPUT);
      pinMode(Limit02, INPUT);
     
     
     
    digitalWrite(SLEEPX, HIGH);  // reveil EasyDriverX
        delay(5);  // le temps de le reveiller*/
     
      digitalWrite(SLEEPY, HIGH);   // reveil EasyDriverY
      delay(5);  // le temps de le reveiller
     
      digitalWrite(MS1X, LOW);
                               // Configuré en Full Steps
      digitalWrite(MS1Y, LOW);      // Configuré en Full Steps
     
     
      //telecomande
      Mirf.cePin = 48;            //pin CE
      Mirf.csnPin = 49;            //pin CSN
      Mirf.spi = &MirfHardwareSpi;
      Mirf.init();
      Mirf.setRADDR((byte *)"serv1");
      Mirf.payload = sizeof(valeurs);
      Mirf.config();
     
      //compas
      Wire.begin();
      Compass.SetDeclination(15, 00, 'E');
      Compass.SetSamplingMode(COMPASS_SINGLE);
      Compass.SetScale(COMPASS_SCALE_130);
      Compass.SetOrientation(COMPASS_HORIZONTAL_Y_NORTH);
     
    }
     
     
     
    void loop() {
    // j'envois les valeurs du compas et du potar
     valeurs [3] = Compass.GetHeadingDegrees();
      valeurs [4] =  analogRead(A3);
     
      Mirf.setTADDR((byte *)"clie1");
      Mirf.send((byte *) &valeurs);
      while (Mirf.isSending());
     
     
    // je recois les valeurs des deux joysticks
     
     while (!Mirf.dataReady()){ }
      Mirf.getData((byte *) &valeurs);
     
      int joystick1X = valeurs [0];
      int joystick1Y = valeurs [1];
      int joystick2X = valeurs [2];
     
     
     
      if ( joystick1X > 712) { //  joystick n° 1 sur axe X
        if (!digitalRead(Limit02)) {}
     
        else {
     
          digitalWrite(dir_pinX, LOW);  // en avant (HIGH = arrière / LOW = avant)
          digitalWrite(step_pinX, HIGH);
          delay(10);
          digitalWrite(step_pinX, LOW);
          delay(10);
        }
      }
     
     
      if ( joystick1X < 312) {
     
        if (!digitalRead(Limit01)) {}
     
        else {
     
          digitalWrite(dir_pinX, HIGH);// en arrière
          digitalWrite(step_pinX, HIGH);
          delay(10);
          digitalWrite(step_pinX, LOW);
          delay(10);
        }
     
      }
      if ( joystick1Y > 712)//joystick n°1 sur axe Y en avant
      {
     
        digitalWrite(dir_pinY, LOW);
        digitalWrite(step_pinY, HIGH);
        delay(1);
        digitalWrite(step_pinY, LOW);
        delay(1);
      }
     
     
     
      if ( joystick1Y < 312)// en arrière
      {
        digitalWrite(dir_pinY, HIGH);
        digitalWrite(step_pinY, HIGH);
        delay(1);
        digitalWrite(step_pinY, LOW);
        delay(1);
      }
      if ( joystick2X < 312) //joystick n° 2 sur axe X
      {
     
        Motor3Avant(255);
     
      }
      else if (joystick2X > 712 )
      {
        Motor3Arriere (255);
      }
     
     
      else
      {
        Motor3Stop();
     
      }
     
     
     
     
    }
     
     
    void Motor3Avant ( byte Spd)
    {
      digitalWrite(DIRA, HIGH);
      digitalWrite(DIRB, LOW);
      analogWrite(ENABLE, Spd);
    }
    void Motor3Arriere( byte Spd)
    {
      digitalWrite(DIRA, LOW);
      digitalWrite(DIRB, HIGH);
      analogWrite(ENABLE, Spd);
    }
    void Motor3Stop()
    {
      digitalWrite(DIRA, LOW);
      digitalWrite(DIRB, LOW);
    }

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/03/2015, 16h03
  2. [XL-2010] Problème sur les critères de filtre avec une variable dans Array
    Par badege3378 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/08/2014, 11h36
  3. Réponses: 15
    Dernier message: 23/06/2006, 13h09
  4. histoire de fonction avec problème sur arguments
    Par bébé dans le forum Langage
    Réponses: 5
    Dernier message: 07/01/2006, 11h29
  5. [débutant]petit problème sur formulaire avec onglets
    Par Christophe93250 dans le forum Access
    Réponses: 2
    Dernier message: 06/01/2006, 10h46

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