Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème Arduino

capteur ultrasons

    27 février 2022 à 14:25:27

    bonjour, je suis actuellement en 1 ère STI2D et je suis entrain de m'entrainez pour notre projet de robot, je suis entrain d'essayer de comprendre le coté capteur à ultrasons mais je suis bloquer car en résultat ça me donne des valeur incompréhensible allant de 20 à -20 pour le temps. Ce n'est pas le même résultat que cet vidéo : https://www.youtube.com/watch?v=vB4oMEFHZSo&ab_channel=Eskimon

    (j'ai changer un tout petit peux le code à ma façon pour ne pas recopier bêtement)

    Je voudrais aussi savoir que représente le DEC de ma ligne 19 ?

    si possible avez vous des conseille, un site, une playlist à me conseillez pour maitriser l'Arduino

    Voici mon code si vous voulez le tester 

    void setup(){
      Serial.begin(9600);
    }
    
    void loop(){
      pinMode(8, OUTPUT);
      digitalWrite(8, LOW);
      delay(500);
      digitalWrite(8, HIGH); 
      delayMicroseconds(10);
      digitalWrite(8, LOW);
      // entré 
      pinMode(8, INPUT);
      int temps = pulseIn(8, HIGH); // revoie le temps de voyage en µ
      // vitesse 
      long distance = (340 * temps) / 1000;
      distance = distance / 2;
      
      Serial.println(distance, DEC);
    }

    Merci de pouvoir m'aidez SVP!!

    -
    Edité par AdelAchouche 27 février 2022 à 14:26:18

    • Partager sur Facebook
    • Partager sur Twitter
      27 février 2022 à 17:13:03

      Bonjour, Merci d'indiquer un titre de sujet en rapport avec votre problématique.

      Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Mauvais titre

      Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

      Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

      De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

      Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

      Pour modifier votre titre, éditez le premier message de votre sujet.

      (titre originel : Problème Arduino)

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        27 février 2022 à 17:40:26

        AdelAchouche a écrit:

        Je voudrais aussi savoir que représente le DEC de ma ligne 19 ?

        si possible avez vous des conseille, un site, une playlist à me conseillez pour maitriser l'Arduino

        Un bon conseil serait de lire la documentation officielle
        Entre autre: Serial.println(val, format)

        format: specifies the number base (for integral data types) or number of decimal places (for floating point types).

        Donc DEC, c'est base de numération utilisée, en l'occurrence le DECimal.

        • Partager sur Facebook
        • Partager sur Twitter
          27 février 2022 à 17:53:11

          Comme le dit ZOUP, le DEC signifie que tu souhaite faire un affichage en décimal.

          Mais le problème vient surtout du fait que ta variable "temps" est un int et que sur Arduino, les int sont considéré comme des entiers sur 2 octets, ce qui laisse des valeurs possible entre -32768 et +32767.

          Du coup, quand tu fais ta multiplication par 340, tu as de forte chance que le résultat soit au delà des limite et devienne aléatoire.

          Pour les nombres entre -96 et 96, cela va bien se passer, la multiplication restera dans le range et donnera un résultat correct.

          Pour les autres nombres, tu auras une valeur aléatoire.

          Sachant qu'après cette multiplication tu fais une division par 2000, ça veut dire que le range affichable sans erreur est compris entre -16 et +16.

          Pour les valeurs capteurs plus grande que 16cm, la multiplication va sortir du range et donc afficher un résultat aléatoire.

          Enfin bref, tu ferais mieux de déclarer ta variable "temps" comme étant un "long", et forcer le calcul sur des "long".

          long temps = pulseIn(8, HIGH);
          long distance = ((((long)340) * ((long)temps)) / ((long)1000));



          -
          Edité par lorrio 27 février 2022 à 17:54:41

          • Partager sur Facebook
          • Partager sur Twitter
            28 février 2022 à 16:15:39

            @lorrio Merci pour ton explication

            c'est bon ça marche!!

            • Partager sur Facebook
            • Partager sur Twitter

            Problème Arduino

            × 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