Transmission Bluetooth

Bonjour à tous !

Je travail actuellement sur une voiture télécommandée par Bluetooth. Les ordres sont envoyés depuis une tablette sous android grâce à une application dédiée (merci AppInventor !).
Le module utilisé est un HC-05
La fonctionnement est le suivant :
Lors d’un appui sur un bouton avancer le message « Avancer » est transmis au module et donc à l’Arduino pour activer les moteurs et donc avancer tout du long ou la pression sur le bouton est maintenu. Lorsque le bouton est relâché, le message « Arreter » est transmis provoquant l’arrêt des moteur.
Cependant grâce au moniteur série, j’ai pu constater la présence de caractères «parasites » qui peuvent nuire au message. Cela fait que l’arduino ne comprends plus la commande.
Vous trouverez ci joint une photo du moniteur série montrant ces caractères parasites.
(En haut soulignées en rouge les seules commandes qu’il devrait y avoir; puis surligné en jaune les caractères parasites; encadrée en dessous en rouge la commande arreter parasitée par des y bizarres faisant que l’arduino ne comprends pas et n’arrêtes pas les moteurs…)

voici le code simplifié du programme qui reçoit les messages :

void loop() {
  while(HC05.available()){
    delay(3);
    char c = HC05.read(); // Lecture caractère par caractère du message reçu
    messageRecu += c;  // Message reçu stocké dans la variable messageRecu
    }

  if (messageRecu.length() >0) {  // Si on reçoit un message
    Serial.println(messageRecu);  // Affichage du message
    if(messageRecu == "Avancer") // Si le message reçu est "Avancer"
       avancer();  // Fonction faisant avancer la voiture
             
      messageRecu="";     // on vide la variable messageRecu
     }
}

Si quelqu’un a la réponse et comprend d’où viennent ces parasites n’hésitez pas !
Ou si vous avez besoin de plus d’éléments demandez moi !

En tous cas merci à tous et bonne journée !!

Bonsoir

Mieux vaut insérer l'image dans le corps du message pour que tout le monde la voie

les "parasites" sont peut être des octets en fait émis par l'application Android (vérifier de son côté)
le y avec le tréma correspond à 255 ou 0xFF en ASCII étendu
0xFF.png
Un parasite a en général un caractère aléatoire , si ce le même symbole revient de manière régulière il est peu probabable qu'il s'agisse d'un parasite

0xFF.png

Il me semble avoir aperçu de temps à autre un ü. En tout du coup serait il possible de supprimer ces ÿ au niveau du programme ? Du genre mettre une condition si le message contient des ÿ les supprimer ?

Merci

Commence par vérifier que la masse de ton HC05 est bien connectée à celle de ton contrôleur. Ensuite tu peux vérifier ton appli, peut-être en la connectant à un autre smartphone plutôt qu'à l'arduino. Il suffit d'installer un terminal bluetooth (facile à trouver sur google play) sur l'autre téléphone et de vérifier ce que tu reçois. Ces vérifications faites, peut-être qu'une résistance pull-down sur le Rx du module HC05 pourrait régler le problème ?

D’accord merci Simplement qu’est ce que la résistance pull-down sur le Rx modifierait ?

Ca éliminerait les parasites interprétés comme niveaux logiques hauts. En général, il y a déjà des pullup et pulldown internes sur les modules du commerce mais va savoir si une résistance n'est pas défectueuse. Il faut une résistance assez élevée, par exemple 5000 ohms.

D’accord merci !!

Sinon j’ai peut être une piste (ou peut être pas du tout...) J’ai appris que lorsqu’on est en mode configuration du hc05, la commande AT+UART nous renvoie la vitesse de transmission (en baud) mais aussi derrière deux chiffres qui auraient avoir avec des bits de parités. Je n’ai pas tout compris sur ce point et du coup est ce que cela pourrait jouer un rôle dans la transmission ?

Merci !

Ton programme n'envoie pas de commande de configuration donc non rien à voir avec ton problème. Ceci dit, je commence à me demander comment tu as configuré ton module. Tu pourrais copier le code que tu as utilisé pour cette manip? Assure-toi de bien avoir choisi une vitesse de transmission qui correspond à celle de ton programme.

Voici le code :

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup() {
 Serial.begin(9600);
 pinMode(9,OUTPUT); digitalWrite(9,HIGH);
 Serial.println("Enter AT commands:");
 mySerial.begin(38400);
}

void loop()
{
 if (mySerial.available())  
 Serial.write(mySerial.read());
 
 if (Serial.available())  
 mySerial.write(Serial.read());
}

Et quelles commandes as-tu tapé dans le moniteur?

J'ai testé celles de base donc : AT AT+NAME AT+VERSION AT+UART AT+PSWD ...

bref, tu n'as pas configuré la vitesse. Une des règles de base pour les communications série c'est d'avoir la même vitesse des 2 côtés...

Comment savoir la vitesse appropriée pour une tablette androïde alors ?

La tablette s'adaptera automatiquement. C'est le module Bluetooth et le port série émulé de ton contrôleur qu'il faut configurer. 9600 Bps devraient être largement suffisant mais tu peux monter jusqu'à 117500 bps si ça traîne. Tu ferais bien de lire un petit tuto sur la com' série pendant que tu y es

Bonne idée ! Si vous en avez un à me conseiller, je suis pas contre !