Partage
  • Partager sur Facebook
  • Partager sur Twitter

hc-06 et arduino

envoyer plusieurs donné en même temps avec un hc 06

    8 janvier 2017 à 17:37:41

    salut a tous  :)

    j'ai actuellement un projet :

    j'utilise l'accéléromètre de mon téléphone avec app inventor pour généré une pwm en fonction de la position de mon téléphone. je m'explique :

    l’accéléromètre de mon téléphone perçois le basculement de mon appareille d'avant en arrière  ( sur l'axe appelé y ) ou de droite a gauche (l'axe x ). jusque la tout va bien :D: je convertit  les valeurs renvoyé par l'accéléromètre sur une valeur de 0 a 255 ( la pwm! ) grâce à l’application , puis je voulais les envoyé à l'arduino avec un module bluetooth hc 06. la , pas de problème je sais établir une liaison série avec le hc 06 et puis faire réagir les sortis digital de l'arduino avec les informations reçu . mais là tout ce complique ! en effet je reçois 2 information simultané ici (l'axe y et l'axe x) et je ne sais pas comment faire pour que mon programme différentie les 2 informations et fasse réagir les bonnes sortis pwm ..

    j'espère avoir été clair( :diable: ) et je vous remercie pour les futurs réponse que vous pourriez m'apporté 

    • Partager sur Facebook
    • Partager sur Twitter
      Staff 9 janvier 2017 à 7:59:39

      Tu pourrais utiliser un formage texte et des délimiteur pour séparer tes données.

      Par exemple, pour envoyer 24 sur l'axe X, tu pourrais envoyer 24x

      Sur l'arduino, il suffit de lire les caractères un par un et faire une action quand le délimiteur est là.

      Exemple :

      // Variable globale (à placer en dehors du loop)
      int pwmval = 0;
      
      
      // Partie traitement (à placer dans le loop)
      if ( Serial.available() ) {
          char c = Serial.read();
          if ( ( c >= '0' ) && ( c <= '9 ) ) {
              pwmval = ( ( pwmval * 10 ) + ( c - '0' ) );
          } else if ( c == 'x' ) {
              analogWrite(pinX, pwmval);
              pwmval = 0;
          } else if ( c == 'y' ) {
              analogWrite(pinY, pwmval);
              pwmval = 0;
          }
      }



      • Partager sur Facebook
      • Partager sur Twitter
        9 janvier 2017 à 20:23:35

        Vraiment , merci a toi lorrio 😊

        J'ai compris ou tu veux en venir avec ta méthode et elle est très adapté pour mon projet . 

        Seulement , je planche sur cette ligne de code :

        if ( ( c >= '0' ) && ( c <= '9 ) ) {
        pwmval = ( ( pwmval * 10 ) + ( c - '0' ) );

        il me semble avoir compris "si il y a quelque chose a lire ( if c>=0 )"<--la je comprend

         et que c'est inférieur a 9( && c<=9 )<-- la je ne comprend deja plus , et pour la suite je ne vois pas pourquoi tu multiplie la variable pwmval par 10 pour ensuite l'aditionné a la différence  de c par 0 .

        j'espère avoir été clair pour te simplifier la tâche 😨 dit moi si je me plante depuis le debut ...

        encore merci pour ta réponse 

        • Partager sur Facebook
        • Partager sur Twitter
          Staff 9 janvier 2017 à 21:02:14

          Il manque une quote ;)

          On devrait normalement avoir ( c >= '0' ) && ( c <= '9' )

          Ce if permet de tester que le caractère reçu est bien entre 0 et 9.

          En clair, cela permet de tester si il s'agit d'un chiffre (0123456789).

          -----

          Quand à la multiplication et la différence de c par 0, cela permet de construire petit à petit le nombre reçu.

          Imaginons que tu envoies "147x", le programme va d'abord recevoir '1', puis '4', puis '7', puis 'x'.

          Au départ, on aura pwmval = 0 donc en recevant le premier '1', cela va faire :

          pwmval = ( ( pwmval * 10 ) + ( c - '0' ) )
                 = ( ( 0 * 10 ) + ( '1' - '0' ) )
                 = ( ( 0 ) + ( 1 ) )
                 = 1

          Après réception de ce '1', on aura donc pwmval = 1

          Puis vient la réception du '4', ce qui va donner :

          pwmval = ( ( pwmval * 10 ) + ( c - '0' ) )
                 = ( ( 1 * 10 ) + ( '4' - '0' ) )
                 = ( ( 10 ) + ( 4 ) )
                 = 14

          Puis vient la réception du '7', ce qui va donner :

          pwmval = ( ( pwmval * 10 ) + ( c - '0' ) )
                 = ( ( 14 * 10 ) + ( '7' - '0' ) )
                 = ( ( 140 ) + ( 7 ) )
                 = 147

          ET voila comment cette petite formule aura permit de reconstruire le nombre final à partir de tous les chiffres reçus un par un.

          -
          Edité par lorrio 9 janvier 2017 à 21:03:50

          • Partager sur Facebook
          • Partager sur Twitter
            9 janvier 2017 à 21:16:39

            Lorrio tu est  génial 😁 

            Merci beaucoup d'avoir pris du temps pour moi et j'ai compris grâce a toi 😊 

            Merci encore et je ferme le sujet car je pense qu'il n'y a plus rien a ajouter 

            Octet.👍

            • Partager sur Facebook
            • Partager sur Twitter
              Staff 9 janvier 2017 à 21:49:52

              Fermer le sujet, tu n'as pas les droits pour ça.

              En revanche, tu peux cliquer sur "sujet résolu" en haut à droite de ton premier message ;)

              • Partager sur Facebook
              • Partager sur Twitter
                10 janvier 2017 à 17:00:28

                oui , façon de parler  ;)
                • Partager sur Facebook
                • Partager sur Twitter

                hc-06 et 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