Go Down

Topic: Connection de modules bluetooth (maitre/esclave) (Read 43797 times) previous topic - next topic

arduinoreg

#15
Jun 07, 2014, 01:20 am Last Edit: Jun 10, 2014, 10:35 am by arduinoreg Reason: 1
Maintenant, une fois les deux modules connectés ensemble, je n'arrive pas à trouver le moyen d'envoyer la valeur d'une variable du maître vers l'esclave qui doit commander mon servomoteur...

Le module Maitre envoie une donnée d'un int "0" ou" 1". Le maitre doit la recevoir..
Voici le code :

Partie Maitre :
Code: [Select]

#include <SoftwareSerial.h>  
#define RxD 10  
#define TxD 11  
SoftwareSerial BTSerie(RxD,TxD);  
//=========================================================
void setup()  
{  
 Serial.begin(9600);  
 BTSerie.begin(9600);
 delay(500);  
}
//====================================================
void loop()  
{  
  int c = 1;                           //variable à envoyer vers l'esclave
  BTSerie.write(c);
  delay(5000);
}
   


Partie esclave :
Code: [Select]
#include <Servo.h>
#include <SoftwareSerial.h>
#define RxD 10  
#define TxD 11  
SoftwareSerial BTSerie(RxD,TxD);
Servo myservo;
//========================================================
void setup()
{
 myservo.attach(9);
 myservo.write(0);
 BTSerie.begin(9600);
}
//==========================================================
void loop()
{
  int position1 = 0;
  int position2 = 179;
  while (BTSerie.available() == 0);
  int c = BTSerie.read();                            //Variable du maître sensée être reçu
    if(c =='1'){
    myservo.write(position1);
    delay(30);
  }
  if(c == '0'){
    myservo.write(position2);
    delay(30);
  }
  delay(500);
}


Cela ne fonctionne pas au moment ou les 2 modules sont connectés (lumière rouge continue sur le HC06..) Avec vous une idée du pourquoi? le HC06 ne reçoit pas la valeur de l'int c au final..
Ce n'est pas de cette façon que l'on peut envoyer une variable d'un module à l'autre?

arduinoreg

#16
Jun 10, 2014, 09:35 am Last Edit: Jun 10, 2014, 10:07 am by arduinoreg Reason: 1
Avez vous une idée de l'origine du problème? Serait-ce un problème de vitesse de transmission? La transmission d'informations doit se faire en 9600 baud c'est bien ça? La vitesse "38400" (est réservé par défaut pour les commande AT) et ensuite il faut bien la mettre à 9600 dans le code de transmission ? Cela ne marche pas.. =(

fdufnews

La vitesse de transmission dépend de ce que tu as mis comme valeur lorsque tu as configuré tes périphériques bluetooth.
En tous cas une chose est sûre, dans le code que tu as mis au-dessus, tu émets à 38400 et tu reçoit à 9600 ce qui me parait un rien surprenant. Normalement la vitesse par défaut pour les échanges c'est 9600 bauds sur les 2 modules.

arduinoreg

Oui, pour la vitesse du code maître je l'ai remis à 9600 pour l'envoie de donnée! Mais ça ne fonctionne pas non plus..

arduinoreg

#19
Jun 10, 2014, 10:39 am Last Edit: Jun 10, 2014, 10:50 am by arduinoreg Reason: 1
Voici les codes de paramétrage de mes modules que j'ai effectué au préalable..

Paramétrage maître :
Code: [Select]
#include <SoftwareSerial.h>  //Software Serial Port  
#define RxD 10  
#define TxD 11  
SoftwareSerial BTSerie(RxD,TxD);

void setup()  
{  
 Serial.begin(9600);  
 delay(500);  
 Serial.print("Bonjour - Pret pour les commandes AT");  
 // Configuration du bluetooth  
 pinMode(RxD, INPUT);  
 pinMode(TxD, OUTPUT);  
 BTSerie.begin(38400);  //necessaire uniquement pour le parametrage des commandes AT du HC05
 delay(500);
 BTSerie.print("AT+VERSION\r\n"); //commande pour obtenir la version firmware
 delay(1000);
 //BTSerie.print("AT+NAMEMaitre1\r\n"); //commande pour renommer le module ne marche pas..
delay(1000);
 BTSerie.print("AT+ROLE=1\r\n"); //commande module en mode master
 Serial.print("Set as Master");
 delay(1000);
 BTSerie.print("AT+CMODE=1\r\n"); //connection automatique à un module (sans spécification de l'adresse)
 delay(1000);
}  
void loop()  
{    
 
}  


Paramétrage esclave :

Code: [Select]
#include <SoftwareSerial.h>  //Software Serial Port
#define RxD 10  
#define TxD 11  
SoftwareSerial BTSerie(RxD,TxD);  
void setup()  
{  
 Serial.begin(9600);  
 delay(500);  
 Serial.print("Bonjour - Pret pour les commandes AT");  
 // Configuration du bluetooth  
 pinMode(RxD, INPUT);  
 pinMode(TxD, OUTPUT);  
 BTSerie.begin(9600);  
 delay(500);  
  BTSerie.print("AT");  
 delay(1000);
 BTSerie.print("AT+VERSION");  
 delay(1000);  
  BTSerie.print("AT+INIT");  
 delay(1000);  
 // BTSerie.print("\n");
 BTSerie.print("AT+NAMEEsclave1");
delay(1000);
 BTSerie.print("AT+ROLE=0");
 Serial.print("Set as Slave");
}  
void loop()  
{  

}  


PS : Le maitre est un HC05 (terminal)

XavierMiller

Le BT maitre est à 38400 bauds, alors que tout le reste est à 9600 bauds...

arduinoreg

#21
Jun 10, 2014, 11:07 am Last Edit: Jun 10, 2014, 11:12 am by arduinoreg Reason: 1
Oui dans le programme de paramétrage 38400 baud et la vitesse par défaut des commandes AT (documentation HC05)...  Il est donc neccésaire dans le pramétrage
Ensuite dans le programme d'envoie de donnée je l'ai mis 9600 qui est la vitesse de transmission des données. (BTSerie.begin(9600) )

arduinoreg

Bah merci! Enfaite en remettant la vitesse à 9600 juste à la fin des commandes AT, ça marche sans problème!

arduinoreg

#23
Jun 10, 2014, 12:49 pm Last Edit: Jun 10, 2014, 12:54 pm by arduinoreg Reason: 1
Ce problème étant levé! Un nouveau apparaît... mais toutefois moins important  :smiley-mr-green:
Voila comme je disais au début de ce post, le but est de faire varier un potentiomètre qui va faire varier la position du servomoteur!
Le soucis, c'est qu'en émission et réception c'est trop lent!! Et il y trop de delay();
Du coup mon servomoteur ne bouge pas linéairement, mais par accoups!
Comment pourrais-je faire? Car lorsque je diminue trop les delay() autant en réception qu'en émission, ça ne fonctionne plus!!

Artouste

#24
Jun 10, 2014, 12:54 pm Last Edit: Jun 10, 2014, 12:59 pm by Artouste Reason: 1

Ce problème étant levé! Un nouveau apparaît... mais toutefois moins important  :smiley-mr-green:
Voila comme je disais au début de ce post, le but est de faire varier un potentiomètre qui va faire varier la position du servomoteur!
Le soucis, c'est qu'en émission et réception c'est trop lent!! Et il y trop de delay();
Du coup mon servomoteur ne bouge pas linéairement!
Comment pourrais-je faire? Car lorsque je les diminue trop autant en réception qu'en émission, ça ne fonctionne plus!!

bonjour
1-  tu es limité par ton debit de 9600
2- mettre des delay de 500,5000
Quote
delay(5000);
, ça aide pas  :smiley-mr-green:

arduinoreg

#25
Jun 10, 2014, 01:23 pm Last Edit: Jun 10, 2014, 01:25 pm by arduinoreg Reason: 1
De plus la fonction c = BTSerie.read(); sensé recevoir un nombre de 0 à 179 donne des valeurs erronées en reception, je ne sais pas pourquoi, je l'ai remplacé par BTSerie.parseInt(); sans vraiment savoir pourquoi..
Sinon; en dessous de 2000ms de delay (loop code esclave) ça ne fonctionne même plus!
Et même avec de grosses tempos, le potentiomètre détecte les faibles variation entre 0 et 179, mais ne bouge parfois pas si les valeurs change de 4 ou 5 sur 179..
Voulez vous voir le code mis à jour?

Artouste



Voulez vous voir le code mis à jour?

pas pour l'instant
avant de t'occuper de faire de l'action sur un servo, commence par verifier l'envoi/reception de ton lien BT
envoie un "renard"  :smiley-mr-green:  "$*01234The quick brown fox jumps over the lazy dog56789#"
et compare/regarde ce qu tu reçois

arduinoreg

Mais y a-t-il un moyen de modifier la vitesse d'un servomoteur? une fonction pour qu'il soit moins rapide?
j'ai essayé avec 2 boucle for et ça ne marche pas?!

john_lenfr

Bon ba je teste mes modules actuellement mais je suis bloqué sur les commandes AT.
Impossible d'avoir une réponse du module à ce que je lui met dans le serial.
Il clignote bien 2Hz mais rien ne se passe.

Une idée?

Artouste


Bon ba je teste mes modules actuellement mais je suis bloqué sur les commandes AT.
Impossible d'avoir une réponse du module à ce que je lui met dans le serial.
Il clignote bien 2Hz mais rien ne se passe.

Une idée?

Bonsoir John
C'est pas bien de venir se greffer sur un topic  :smiley-mr-green:

et tu connais les regles pour une bonne resolution de (ton) probleme  8)

expose ailleurs correctement ton probleme "à toi"   :smiley-mr-green:
Liens "matos" ?
photos ?
code(s) ?

Go Up