Partage
  • Partager sur Facebook
  • Partager sur Twitter

Echange de données Android/Arduino (Bluetooh)

    12 décembre 2015 à 19:55:35

    Bonjour à tous ! Voilà mon problème:

    Je me suis lancé dans la réalisation de petites applications android (grâce à App Inventor) qui communiquent avec un Arduino par bluetooth (Module HC06), jusque là je n'ai aucun probleme pour envoyer une donnéee de l'un à l'autre quelque soit le sens mais les choses se compliquent quand ils faut en envoyer plusieurs, je m'explique : J'aimerais que mon arduino envoie des données (Température, Pression, Humidité) et que mon application me les présente dans 3 zones de textes indépendantes. Mon malheur, dans tout celà, c'est que je ne vois pas comment faire pour que mon application fasse la différence entre une donnée de température, de pression ou d'humidité. Pour l'instant j'ai un code arduino qui est comme ceci :

    #include <SoftwareSerial.h>
    
    SoftwareSerial HC06(11,10);
    const char DOUT_LED = 13;
    String messageRecu;
    int temps = 0;
    int temperature = 45;
    int rh = 70;
    int qnh = 1013;
    void setup() {
      Serial.begin(9600);
      HC06.begin(9600);  
      pinMode(DOUT_LED, OUTPUT);
      digitalWrite(DOUT_LED, HIGH);
      temps = millis() + 1000;
    }
     
    void loop()
    {
      if(HC06.available()){
        Serial.println(HC06.read());
      }
      if(millis() > temps){
        HC06.write(temperature);
        Serial.write(temperature);
        delay(30);
        HC06.write("T");
        delay(30);
        HC06.write(rh);
        delay(30);
        HC06.write("R");
        delay(30);
        HC06.write(qnh);
        delay(30);
        HC06.write("Q");
        temps = millis() + 3000;
      }
    }

    Et ma partie Block, sous App inventor ressemble à ceci :

    J'attends vos réponse avec impatience !

    • Partager sur Facebook
    • Partager sur Twitter
      12 décembre 2015 à 21:11:49

      Tu devrais te définir un protocole de communication pour ce genre du chose ;)

      Par exemple, tu pourrais envoyer : T=12;P=142;H=45;

      Coté android, il te faut lire les caractères et les stocker dans une string.

      Dès que tu reçois un point virgule, alors il faut analyser la chaine reçu en cherchant le signe égal pour isoler la clef de la valeur.

      D'ailleurs, il existe la méthode split sur les strings de app inventors.

      Ton programme devrait alors être :

      when ( dataAvailable() ) {
      
          c = ReadData()
      
          if ( c == ';' ) {
      
              list = str.split("=");
      
              key = list[0];
              val = list[1];
      
              if        ( key == "T") {
                  // ICI: traiter le cas d'une réception de température
              } else if ( key == "...") {
                  ...
              }
      
          else {
              str = str + c;
          }
      
      }
      
      

      -
      Edité par lorrio 12 décembre 2015 à 21:12:50

      • Partager sur Facebook
      • Partager sur Twitter
        13 décembre 2015 à 9:11:15

        Merci lorrio, j'avais penser à ce genre de protocole, je pense que le programme app inventor ne pose pas de souci mais C'est le programme arduino qui me pose problème dans cette situation. Dois-je envoyer toute la chaîne de donné d'un seul coup dans un seul appel à la fonction HC06.write(), ou est-ce que peux envoyer : "T=" puis ma variable temperature puis ";", etc. Dans le premier cas, je ne vois pas comment faire en sorte d'intégrer toutes mes variables et tout les caractères dans une seule chaîne de caractère :(.
        • Partager sur Facebook
        • Partager sur Twitter
          13 décembre 2015 à 9:50:40

          Un SoftwareSerial, ça marche exactement comme un Serial.

          Ton code devrait tout simplement être :

          HC06.print("T=");
          HC06.print(temperature);
          HC06.print(';');
          
          HC06.print("R=");
          HC06.print(...);
          HC06.print(';');
          
          ...

          Tu noteras que j’utilise print et non write car la fonction write est prévu pour envoyer uniquement un seul caractère.

          Or, pour envoyer une pression de 1023hPA, il faut 4 caractères.

          -
          Edité par lorrio 13 décembre 2015 à 9:53:15

          • Partager sur Facebook
          • Partager sur Twitter

          Echange de données Android/Arduino (Bluetooh)

          × 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