Problème d'action(s) avec un module Bluetooth HC-05

Bonjour à tous,

Je rencontre une difficulté à trouver le code nécessaire pour créer un ordre et le réaliser.
En fait, le projet que je réalise est un robot qui roule et qui prend des mesures. Pour la partie moteur et sonde, le code est terminé mais je n'arrive pas trouver les commandes qui permettent de mettre en marche le tout grâce au bluetooth.

Je suis capable de communiquer entre le téléphone et le module grâce à l'application "Bluetooth Terminal HC-05". (dans le moniteur série)

De plus, même avec la commande "SoftwareSerial mySerial(10, 11);" je ne peux que communiquer par l'entrée Rx-0 et la sortie Tx-1.

En pièce jointe, j'ai mis un programme venant d'un site qui est censé faire fonctionner ou pas une led depuis le smartphone. Cependant, le code fonctionne mais impossible d'allumer la led.

Merci de m'éclairer.
Stax

bluetooth_exp_rience_avec_LED.ino (396 Bytes)

peut pas lire la PJ sur mon smartphone.. sorry

lisez comment utiliser le forum (les posts épinglés en haut du forum comme "Bien éditer son post pour les nuls" , "Faire un Nouveau Sujet ou le corriger avec les Balises..." et "Règles du forum francophone"), et faites un post "propre"

Voici le code:

#include <SoftwareSerial.h>

char c;
int  LED = 13;

SoftwareSerial mySerial(10, 11);

void setup()
{
  pinMode(13, OUTPUT);
  mySerial.begin(9600);
}

void loop()
{
  while (!mySerial.available());
  c = mySerial.read();
  if (c == '1') 
  {
    digitalWrite(LED, HIGH);
    delay(1000);
  }
  if (c == '0') 
  {
    digitalWrite(LED, LOW);
    delay(1000);

  } 
}

le HC-05 peut-être maître ou esclave BT. Comment est-il configuré ?

L'avez vous apparié avec votre application Bluetooth Terminal ? êtes vous bien en 9600 bauds ?

PS: les "delay(1000);" dans votre code sont inutiles

Alors,

Je suis bien à 9600 bauds. Le delay(1000); ne sert bien à rien, je me suis documenté puis je l'ai supprimé du code. J'ai du donner une version antérieure.

Oui j'arrive à m'appairer et à communiquer avec le HC-05.

Le problème étant que je ne sais pas comment m'y prendre pour vérifier le slave/master. En effet, j'ai essayé diverses techniques trouvée sur le web mais aucune ne m'a permis de vérifier ou même paramétrer le mode.

Maintenant, je sais paramétrer le slave/master. Le rôle du module en slave, donc 0 ne permet pas de faire fonctionner le programme juste au dessus.

Bonjour,

dans : while (!mySerial.available()); , il y a quelque chose qui me gène : le ! .....

Regarde dans la référence arduino de l'ide ou sur le net à quoi correspond ce point d'exclamation.

Pierre

petrusfr:
Bonjour,

dans : while (!mySerial.available()); , il y a quelque chose qui me gène : le ! .....

Regarde dans la référence arduino de l'ide ou sur le net à quoi correspond ce point d'exclamation.

Pierre

Pierre le while (!mySerial.available());veut simplement dire ne rien faire et attendre tant qu’il n’y a rien à lire sur le port série. . C’est tout à fait acceptable (pas efficient mais acceptable)

Je suis allé un peu vite en lisant.... je n'avais pas bien lu la ligne du while en effet ...

Peut être le câblage alors ?!!!

Quelles sont EXACTEMENT les liaisons TX/RX entre l'arduino et le HC05?

Pierre

Voici le câblage de l'expérience (code au dessus).
J'ai mis le RX et le TX sur 0;1.
C'est un contre sens au code car il est prévu de les mettre sur 10;11 mais la communication entre tél/hc05 ne fonctionne que quand les pins sont sur 0;1, ce qui est étrange.

il faut brancher sur 10 et 11... c'est ce que vous écoutez dans le code...
les pins 0 et 1 sont connectée au port USB et donc à ce que vous échangez avec la console série de l'IDE

Oui mais le soucis c'est que l'expérience ne fonctionne ni sur 0;1 ni sur 10;11.
J'ai même tenté toutes les combinaisons de câbles (inversement, 3.3V, 5V, 0;1, 10;11) et cela ne marche toujours pas.

Hé c’est pas de la magie noire...c’est déterministe...

Vous appelez SoftwareSerial(rxPin, txPin) avec rxPin (10 pour vous) la pin de réception et txPin celle d’émission (11 pour vous)

Donc on croise les Rx et Tx pour que le Tx de votre module parle au Rx du softwareSerial et inversement

L’alim c’est documenté, si c’était 3.3V sans supporter 5V et que vous avez mis 5V, votre module est peut être bon pour la poubelle.

Ensuite il faut trouver le bon débit. 9600 autre ?
On ne sait pas comment vous l’avez configuré non plus...

Vous dites
Oui j'arrive à m'appairer et à communiquer avec le HC-05.
ou encore
Maintenant, je sais paramétrer le slave/master.

==> comment ??

En fait, je débute donc je n'y connais vraiment pas grand chose. C'est mon premier projet avec arduino.

Je ne savais pas qu'il fallait croiser les Rx et Tx donc merci de l'info. :wink:

Cependant, je suis au courant que faire passer une tension trop forte peut endommager les composants électroniques. Je me suis informé auprès de la fiche technique du constructeur qui me dit que je peux aller jusque 6.6V à l'entrée du composant. C'est donc sans crainte.

A propos du code de l'expérience que je souhaite faire fonctionner grâce à votre aide, une application android était fournie d'office avec le programme.
L'ensemble est sur ce site.

Pour ce qui est du module, son rôle est à 0 (slave) et il est à 9600 bauds.

Quand je dis que j'arrive à m'appairer et à communiquer avec le module, c'est quand le code de l'expérience est transversé sur la carte. Enfin, du moins la bibliothèque qui est activée.
J'ai sur le tél une appli qui s'appelle "bluetooth terminal hc05" qui me permet de communiquer entre le moniteur série et le tél.

De plus, ce matin, j'ai enfin réussi à faire les manips pour accéder au paramétrage du bluetooth donc possibilité de changer sa vitesse, son rôle, nom...

Expliquez vos « manips »

Les manips que j'évoque ne sont pas le sujet. En effet, elles ne sont là que pour le paramétrage du module bluetooth.

Mon soucis est en partie réglé car je peux maintenant utiliser l'application Bluetooth Terminal HC-05 pour communiquer avec le module, donc lui faire exécuter certaines actions. Cependant, l'utilisation de App Inventor pour les applications sur smartphone est encore un autre problème à résoudre.

#include <SoftwareSerial.h>

String c;
int  LED = 13;

SoftwareSerial mySerial(10, 11);

void setup()
{
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  mySerial.begin(9600);
}

void loop()
{
  if (mySerial.available()>0){ 
    c = mySerial.readString();
    Serial.println(c);
    if (c.substring(0,1) == "1") 
    {
      digitalWrite(LED, HIGH);
    }
    if (c.substring(0,1) == "0") 
    {
      digitalWrite(LED, LOW);
    }
  }
  if (Serial.available()>0){ 
    c = Serial.readString();
    Serial.println(c);
    if (c.substring(0,1) == "1") 
    {
      digitalWrite(LED, HIGH);
    }
    if (c.substring(0,1) == "0") 
    {
      digitalWrite(LED, LOW);
    }
  }
   
}

Dans ce code, on peut communiquer pour éteindre ou allumer la led aussi bien par le bluetooth que par le moniteur série.

Bon, si c’est pas le sujet très bien bon courage et si ça marche alors Tout va bien.