Partage
  • Partager sur Facebook
  • Partager sur Twitter

Arduino programmation

    7 août 2020 à 23:40:58

    Bonjour,

    je suis en train de fabriquer un robot mais je me confronte à un problème. j'ai branché sur une carte de prototypage relié à un arduino une photo résistance qui allume un led quand la luminositée est faible avec un module ultra-son. Le code et les branchements marchent nickel mais quand j'ai rajouté un servo-moteur que je contrôle avec un joystick, la photorésistance  et le module ultra-sons ne fonctionne plus en dépit du servo-moteur avec son joystick.

    #include <Servo.h>
    #define pinJx A1 // Broche pour l'axe X du joystick.
    #define pinJy A2 // Broche pour l'axe Y du joystick.
    #define pinSx 9  // Broche pour le signal du servomoteur X.
    #define pinSy 10 // Broche pour le signal du servomoteur Y.
    
    unsigned short X, Y; // Variables pour les valeurs du joystick.
    Servo Sx, Sy;        // Déclaration de deux objets Servo.
    
    
    int trig = 2;
    int echo = 3;
    long lecture_echo;
    long cm;
    int val = 0;
    int sensorPin = 0;
    int ledPin = 13;
    
    
     
    
    // Fonction setup(), appelée au démarrage de la carte Arduino
    void setup() {
    
      Serial.begin(9600);
      pinMode(trig, OUTPUT);
      digitalWrite(trig, LOW);
      pinMode(echo, INPUT);
      pinMode( ledPin, OUTPUT );
     
      pinMode(pinSx, OUTPUT); // Broches fixées en sortie.
      pinMode(pinSy, OUTPUT);
      
      Sx.attach(pinSx); // Correspondance broche/servomoteur.
      Sy.attach(pinSy);
      
      Sx.write(90); // Mouvement du servomoteur en position initiale.
      Sy.write(90);
    
    }
    
    // Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée
    void loop() {
    
      
    
      X = analogRead(pinJx); // Lecture des valeurs du joystick.
      Y = analogRead(pinJy);
      
      Sx.write(joyToServo(X)); // Envoi des signaux de rotation.
      Sy.write(joyToServo(Y));
    
    }
    
    byte joyToServo(unsigned short n) // Fonction de correspondance.
    {
      
      return (byte)(-0.175953 * n + 180); // f(x) calculée précédemment.
      
    
    
       val = analogRead(sensorPin);
      Serial.println(val);
      if (val < 20) {
        digitalWrite(ledPin, HIGH);
      } else {
        digitalWrite(ledPin, LOW);
      }
      delay(1000);
      
      // Mesure la tension sur la broche A0
      int valeur = analogRead(A0);
      
      // Envoi la mesure au PC pour affichage et attends 250ms
      Serial.println(valeur);
      delay(250);
      digitalWrite(trig, HIGH);
    delayMicroseconds(10);
    digitalWrite(trig, LOW);
    lecture_echo = pulseIn(echo,HIGH);
    cm = lecture_echo /58;
    Serial.print("Distance en cm :");
    Serial.println(cm);
    delay(1500);
    }

    pouvez-vous me montrer mes erreurs et me les expliquer ?

    Merci pour votre réponse

    • Partager sur Facebook
    • Partager sur Twitter
      8 août 2020 à 15:37:06

      Salut,

      Ça fait un moment que je n'ai pas codé avec Arduino mais je viens de tester, en python, l'erreur que tu dois faire je pense.

      La suite de ton code après le return est ignoré : c'est le cas en python.

      Si je comprends bien ton code, tu as fait l'erreur d'une fonction fourre-tout : JoyToServo(). Fais une autre fonction avec ce qui suit et tu l'utilises par la suite.

      Enfin, arrête avec delay() et apprends millis(), en plus, ton projet se prête parfaitement à l'apprentissage de cette fonction. Les 2 fonctions font sensiblement la même chose : attendre, mais la première est bloquante, l'autre non. Dans ton code, pendant 2750ms, tu ne peux pas interagir. Imagine que ton véhicule est à moins de 2750 ms du mur => accident. Avec millis, tu as la main avec le joystick ou c'est automatique avec le capteur ultrasons, pourvu qu'il soit bien configuré.

      • Partager sur Facebook
      • Partager sur Twitter
        9 août 2020 à 21:23:45

        Merci pour ta réponse je vais changer le code quand je rentrerai de de vacances je te tiens au courant pour d’éventuels problème.
        • Partager sur Facebook
        • Partager sur Twitter

        Arduino programmation

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown