[Programmation] programme arduino avec joystick
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

programme arduino avec joystick



  1. #1
    invite222fdf6d

    Post programme arduino avec joystick


    ------

    bonjour,

    je suis en terminal sti2d, et j'ai projet. ce projet de faire un fauteuil roulant avec un joystick et 2 moteur .
    j'ai un programme sur aduino mais je sa ne marche pas pourriez vous m'aider s'il vous plait c'est pour le bac.
    j'utilise un pont H monster shield
    ceci est le pont hNom : téléchargement (2).jpg
Affichages : 204
Taille : 19,9 Ko
    voici le programme:
    Code:
    /*  MonsterMoto Shield Example Sketch
      date: 5/24/11
      code by: Jim Lindblom
      hardware by: Nate Bernstein
      SparkFun Electronics
     
     License: CC-SA 3.0, feel free to use this code however you'd like.
     Please improve upon it! Let me know how you've made it better.
     
     This is really simple example code to get you some basic
     functionality with the MonsterMoto Shield. The MonsterMote uses
     two VNH2SP30 high-current full-bridge motor drivers.
     
     Use the motorGo(uint8_t motor, uint8_t direct, uint8_t pwm) 
     function to get motors going in either CW, CCW, BRAKEVCC, or 
     BRAKEGND. Use motorOff(int motor) to turn a specific motor off.
     
     The motor variable in each function should be either a 0 or a 1.
     pwm in the motorGo function should be a value between 0 and 255.
     */
    #define BRAKEVCC 0
    #define CW   1
    #define CCW  2
    #define BRAKEGND 3
    #define CS_THRESHOLD 100
    
    // Définition des broches analogique
    #define JOYSTICK_X A0 // X -> droite / gauche
    #define JOYSTICK_Y A1 // Y -> vitesse / direction
    
    // Définition des états des moteurs
    #define MOTEUR_STOP 0
    #define MOTEUR_AVANCE 1
    #define MOTEUR_RECULE 2
     
    // Définition de la marge autour du point d'origine (0, 0)
    // Permet d'éviter que les moteurs n'oscille entre MOTEUR_AVANCE et MOTEUR_RECULE
    #define THRESHOLD 20
     
    // Définition de la valeur maximum pour la vitesse
    #define MAX_SPEED 127
     
    /*  VNH2SP30 pin definitions
     xxx[0] controls '1' outputs
     xxx[1] controls '2' outputs */
    int inApin[2] = {7, 4};  // INA: Clockwise input
    int inBpin[2] = {8, 9}; // INB: Counter-clockwise input
    int pwmpin[2] = {5, 6}; // PWM input
    int cspin[2] = {2, 3}; // CS: Current sense ANALOG input
    int enpin[2] = {0, 1}; // EN: Status of switches output (Analog pin)
    
    int statpin = 13;
    
    
    // Variables global
    // calX : calibration en 0 de l'axe X
    // calY : calibration en 0 de l'axe Y
    // vitesse : vitesse calculé
    // direction : direction calculé
    int calX, calY, vitesse, direction;
    
    // rawX : calibration en 0 de l'axe X
    // rawY : calibration en 0 de l'axe Y
    
    int rawX, rawY;
    // coefG : coefficient de vitesse (entre 0 et 1) pour le moteur gauche
    // coefD : coefficient de vitesse (entre 0 et 1) pour le moteur droit
    float coefG, coefD;
    //
    void setup()
    {
      Serial.begin(9600);
       // Initialisation du port série
      
      pinMode(statpin, OUTPUT);
    
      // Initialize digital pins as outputs
      for (int i=0; i<2; i++)
      {
        pinMode(inApin[i], OUTPUT);
        pinMode(inBpin[i], OUTPUT);
        pinMode(pwmpin[i], OUTPUT);
      }
      // Initialize braked
      for (int i=0; i<2; i++)
      {
        digitalWrite(inApin[i], LOW);
        digitalWrite(inBpin[i], LOW);
      }
      
     
      // Calibration de la valeur (0, 0) du joystick
      calX = analogRead(JOYSTICK_X);
      calY = analogRead(JOYSTICK_Y);
      // motorGo(0, CW, 1023);
      // motorGo(1, CCW, 1023);
    }
    
    void loop()
    {
    
      motorGo(0, CW, 1023);
      motorGo(1, CCW, 1023);
      delay(115200);
    
      motorGo(0, CCW, 1023);
      motorGo(1, CW, 1023);
    
        // Mesure des valeurs brute en X et Y
      rawX = analogRead(JOYSTICK_X) - calX;
      rawY = analogRead(JOYSTICK_Y) - calY;
     
      if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
        digitalWrite(statpin, HIGH);
        Serial.println("JOYSTICK_X");
    }
    
    void motorOff(int motor)
    {
      // Initialize braked
      for (int i=0; i<2; i++)
      {
        digitalWrite(inApin[i], LOW);
        digitalWrite(inBpin[i], LOW);
      }
      analogWrite(pwmpin[motor], 0);
    }
    
    /* motorGo() will set a motor going in a specific direction
     the motor will continue going in that direction, at that speed
     until told to do otherwise.
     
     motor: this should be either 0 or 1, will selet which of the two
     motors to be controlled
     
     direct: Should be between 0 and 3, with the following result
     0: Brake to VCC
     1: Clockwise
     2: CounterClockwise
     3: Brake to GND
     
     pwm: should be a value between ? and 1023, higher the number, the faster
     it'll go
     */
    void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm)
    {
      if (motor <= 1)
      {
        if (direct <=4)
        {
          // Set inA[motor]
          if (direct <=1)
            digitalWrite(inApin[motor], HIGH);
          else
            digitalWrite(inApin[motor], LOW);
    
          // Set inB[motor]
          if ((direct==0)||(direct==2))
            digitalWrite(inBpin[motor], HIGH);
          else
            digitalWrite(inBpin[motor], LOW);
    
          analogWrite(pwmpin[motor], pwm);
        }
      }
    }

    -----
    Dernière modification par Antoane ; 28/03/2017 à 10h22. Motif: Ajout balises [/code]

  2. #2
    invite7070fa42

    Re : programme arduino avec joystick

    Bonjour,

    avant toute chose mieux vaut ici poster ton code avec la balise code (le bouton # en haut de ta fenêtre de réponse).

  3. #3
    invite7070fa42

    Re : programme arduino avec joystick

    Je continu: tu ne dis pas ce qui ne marche pas et a quel moment et ça bloque, c'est pourtant une information importante.
    - ton programme refuse de compiler ou télécharger?
    - les valeurs du joystick ne sont pas lues correctement? (l'outil serial te permet de vérifier ça, c'est la petite loupe en haut à droite de la fenêtre qui te permet de lire les variables internes de l'arduino quand ton programme est en cours d'exécution)
    - les moteurs réagissent mais pas comme tu veux?
    - tes branchements sont-ils bons?


    Ce que je remarque c'est que l'environnement arduino accepte de compiler ton code, donc la syntaxe est à priori bonne.

    Au premier coup d'oeil il y a cependant quelques trucs bizarres:

    Code:
    delay(115200);
    ici "115200" représente une attente de 115,2secondes, pourquoi cette valeur?

    Code:
    float coefG, coefD;
    Pourquoi cette ligne? Ces variables ne sont utilisées nulle part ailleurs.

    Code:
    rawX = analogRead(JOYSTICK_X) - calX;
    rawY = analogRead(JOYSTICK_Y) - calY;
    A quoi te sert de définir ces valeur raw puisque tu ne les utilisent jamais ailleurs dans le programme?

    Il te faut valider les parties du code une à une , en particulier avec l'outil serial.
    Déjà s'assurer que tu lis correctement les valeurs du joystick

  4. #4
    invite222fdf6d

    Re : programme arduino avec joystick

    Oui, les branchement sont bon cependant je n'ai qu'essayer qu'avec un seule moteur et en faite le moteur tourne tout le temps sauf quand avec le joystick je me dirige vers le bas

  5. A voir en vidéo sur Futura
  6. #5
    invite7070fa42

    Re : programme arduino avec joystick

    Ok mais j'ai quand même une question: comprends tu quelque chose au programme que tu as posté où est-ce une simple copie provenant par exemple d'internet?

    Je t'ai orienté vers de outils et des pistes pour le déboggage mais tu sembles les ignorer.

    Utilises tu aussi les moteur adéquats?

Discussions similaires

  1. programme un microcontrôleur ( radar de recul avec Arduino)
    Par invite9301851d dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 12/04/2016, 23h35
  2. Arduino commandé par Joystick
    Par invite9cef8d13 dans le forum Électronique
    Réponses: 8
    Dernier message: 01/08/2015, 18h18
  3. - Arduino commandé par Joystick -
    Par invite2f313dba dans le forum Électronique
    Réponses: 224
    Dernier message: 31/12/2014, 19h31
  4. [PROJET SI] Aide pour programme Arduino avec Bluetooth
    Par invite142bdbde dans le forum TPE / TIPE et autres travaux
    Réponses: 1
    Dernier message: 04/03/2014, 09h37
  5. programme gestion led avec arduino
    Par invite039e7366 dans le forum Électronique
    Réponses: 4
    Dernier message: 03/01/2012, 18h29
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...