Partage
  • Partager sur Facebook
  • Partager sur Twitter

[ARDUINO] Problème de communication avec des HC-05

Mauvaise réception des données avec des HC-05

Sujet résolu
    27 février 2019 à 10:21:10

    Bonjour, 

    Avec 2 modules bleutooth HC-05 (configurés en 38400 baud); un arduino UNO et un DUE, j'essaye de faire communiquer les informations de température et d'humidité relevées par un DTH11 sur mon arduino UNO à mon DUE.

    Le problème: l'envois se fait correctement mais pas la réception (j'ai quand même vérifié avec un script de base que la connexion marche et oui, ça fonctionne)!

    Pourriez-vous m'aider?

    Envois:

    #include <SimpleDHT.h>
    int pinDHT11 = 2;
    SimpleDHT11 dht11;
    
    void setup() {
      Serial.begin(38400);
    }
    
    void loop() {
      byte temperature = 0;
      byte humidity = 0;
      byte data[40] = {0};
      if (dht11.read(pinDHT11, &temperature, &humidity, data)) {
        return;
      }
      String tt = "T" + String(temperature);
      String th = "H" + String(humidity);
      Serial.print(tt);
      delay(1000);
      Serial.print(th);
      delay(1000);
    }

    Réception:

    String temp, hum;
    void setup(){
     Serial.begin(9600);
     Serial3.begin(38400);    
    }
    void loop(){
      if (Serial3.available())
      {
        String traitement = String(Serial3.read());
        String first = traitement.substring(0,1);
        String reste = traitement.substring(1);
        if(first == "T"){
          temp = reste;
          Serial.println(reste);
          Serial.print("°C"); 
        }
        else if(reste == "H"){
          hum = reste;
          Serial.println(reste);
          Serial.print("%");
        }
        else{
          Serial.println("ERREUR:");
          Serial.println(Serial3.read());
          Serial.println(traitement);
          Serial.println(first);
          Serial.println(reste);
          Serial.println("FIN DETAILS ERREUR");
        }
      }
    }

    Et une erreur (les l3 l4 et l5 varient):

      ERREUR:

      -1

      50

      5

      0

      FIN DETAILS ERREUR


    Merci d’avance!

    • Partager sur Facebook
    • Partager sur Twitter
      1 mars 2019 à 7:09:52

      La fonction Serial.read() que tu utilises ligne 9 va lire un seul caractère, donc ça va forcément poser problème quand tu voudras extraire des sous chaine ;)

      De plus, ton if Serial.available() que tu utilises ligne 8 ne te garanti pas que tous les caractères de la mesure son reçu mais simplement qu'il y a au moins un caractère à lire.

      Je te conseille plutôt de changer de stratégie en plaçant tes délimiteurs à la fin et de reconstituer le nombre petit à petit.

      Exemple:

      void loop() {
      	byte temperature = 0;
      	byte humidity = 0;
      	byte data[40] = {0};
      	if (dht11.read(pinDHT11, &temperature, &humidity, data)) {
      		return;
      	}
      	Serial.print('>');               // Délimiteur début de nombre
      	Serial.print((int)temperature);  // Valeur temperature
      	Serial.print('T');               // Délimiteur fin de temperature
      	Serial.print('>');               // Délimiteur début de nombre
      	Serial.print((int)humidity);     // Valeur temperature
      	Serial.print('H');               // Délimiteur fin de temperature
      }
      int rxtmp;
      
      void loop() {
      	
      	if ( Serial3.available() ) { // Si un caractère est reçu
      	
      		char c = Serial3.read(); // On lit ce caractère
      		
      		if ( c == '>' ) { // Début de nombre ?
      			rxtmp = 0; // On repart de 0
      		}
      		
      		if ( ( c >= '0' ) && ( c <= '9' ) ) { // Chiffre ?
      			rxtmp = ( ( rxtmp * 10 ) + ( c - '0' ) ); // Construction du nombre
      		}
      		
      		if ( c == 'T' ) { // Fin de température ?
      			Serial.print("Temperature= "); // Affichage
      			Serial.print(rxtmp);
      			Serial.println();
      			rxtmp = 0;
      		}
      		
      		if ( c == 'H' ) { // Fin d'humidité ?
      			Serial.print("Humidite= "); // Affichage
      			Serial.print(rxtmp);
      			Serial.println();
      			rxtmp = 0;
      		}
      		
      	}
      	
      }




      -
      Edité par lorrio 1 mars 2019 à 7:10:28

      • Partager sur Facebook
      • Partager sur Twitter
        16 mars 2019 à 18:20:51

        Merci beaucoup est désolé pour ma réponse très tardive! J'essaye ca tout à l'heure et ca remplacera bien mon système tout pourris et pas optimisé du tout avec des lettres 😂, Merci
        • Partager sur Facebook
        • Partager sur Twitter

        [ARDUINO] Problème de communication avec des HC-05

        × 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