Communication entre deux modules bluetooth HC-05

Bonjour !

Je dispose de deux modules HC-05, un maitre et un esclave, que j'arrive à connecter ensemble. Cependant, je ne sais pas quel programme utiliser pour pouvoir envoyer des donnees de l'un a l'autre.

Ce que je voudrai faire, c'est réussir à commander un servomoteur à distance grâce un joystick. J'ai donc besoin que le maitre envoie à l'esclave une donnée, et que en fonction, la carte arduino fasse bouger le servo.

Est ce que l'un d'entre vous saurait comment faire ?

Merci d'avance !

Bin c'est de la com série donc librairie Serial
Et pour le servo bin ... librairie servo

pas mieux que la reponse de B@tto
j'ajouterais que tu pourrais utilement t'inspirer
du joy BT commander de kas pour le "protocole" de communication
http://forum.arduino.cc/index.php?topic=173246.0

pour le "meme prix" tu aura une commande possible sous androïd par joystick virtuel ou par ton soft perso et joystick reel.

Oui je sais qu'il faut que j'utilise la libraire software serial, mais quelles fonctions plus précisément ?

J'ai téléversé ces codes, mais ils ne fonctionnent pas...

Ps : Ces codes ne font que allumer et éteindre une LED, mais autant commencer par quelque chose de facile =P

Slave2_0.ino (299 Bytes)

Master2_0.ino (290 Bytes)

Non mais même pas besoin de software serial. Utilise les fonction de base du série hardware (passant par l'usb) Serial.read() Serial.print() ....

Mais si elles passent par l'USB ça veut dire que je dois tout le temps être branchée au PC nan ? Parce que dans mon projet final, une des deux cartes arduino sera embarquée sur un bateau télécommandé...

Du bluethooth sur du RC c'est pas vraiment la meilleure méthode de communication: portée limitée, parasites et déconnections fréquents.
J'aurais plutot mis du 433MHz.

Le but c'est que la portée soit faible...

Pour répondre à la question non, si ton module Bluetooth utilise les ports 0 et 1 de communication, lorsque tu enverras ou recevra ça passera par le serial classique et les modules transformeront ta liaison en sans fil
:wink:

Si tu gardes le Softserial, peut être aussi changer ton code réception en:

#include <SoftwareSerial.h>
int LED = 13;
char c;

SoftwareSerial Slave(15,14);


void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(38400);
  Slave.begin(38400);
}

void loop() {
  if (Slave.available()>0)
  {
    Serial.println("reception...");
    c = Slave.read();
    Serial.print("recu: ";
    Serial.println(c);
    if (c == '45'){
       digitalWrite(LED, HIGH);
       Serial.println("led allumee";
    }
    else
    {
       digitalWrite(LED, LOW); 
       Serial.println("led eteinte";
    }
  }
}

L'avantage de garder le Serial classique c'est que tu peux faire du débug en même temps que tu utilises le module bluetooth

Ok merci =)

Donc a priori ces codes devraient fonctionner ?

Master2_0.ino (206 Bytes)

Slave2_0.ino (248 Bytes)

Oui si tu veux envoyer en Serial classique et recevoir en SoftSerial

Si tu envois 1 ou 0 à ce moment là déclare plutot un int qu'un char à la réception.

C'est à dire ? Enfin, quelle est la différence entre les deux ?

Dans ton code Master tu ne déclare pas de librairie ni n'utilise de SoftSerial.

Sur ton Arduino Master tu dois donc cabler ton module bluetooth sur le pin 0 et 1.

Dans ton code Slave tu utilises le SoftSerial donc tu dois brancher ton module sur les pins que tu déclares: SoftwareSerial Slave(15,14);

Si tu ne veux pas utiliser de librairie SoftSerial tu ne déclares rien

En résumé si tu branches tes modules sur le TX/RX des pins 0 et 1 de la partie émission ET la partie réception, un code fonctionnel pourrais être:

MASTER:

/*
MASTER
MODULE BLUETOOTH

v1.0

*/


 int Pin = 9;
 int P;
 

void setup() {
  pinMode(Pin, INPUT);
  Serial.begin(9600);
}

void loop() {
  P = digitalRead(Pin);
  if (P == 0)
    Serial.write(0);
  else 
    Serial.write(1);
}

SLAVE:

/*
SLAVE
MODULE BLUETOOTH

v1.0

*/

int LED = 13;
int c;



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

void loop() {
  if (Serial.available()>0)
  {
   c = Serial.read();
   if (c == 0) digitalWrite(LED, LOW);
   if (c ==1 ) digitalWrite(LED, HIGH); 
  }
}

Ok merci beaucoup ! =)

Mais je te conseille plutôt d'utiliser le SoftSerial car:
ça t'éviteras de débrancher tes modules Bluetooth à chaque upload de sketch
ça te permettra d'utiliser toujours la liaison série pour faire du débug avec l'ordi en cas de besoin

Merci pour les codes !

Et ok si j'ai des problèmes avec le serial j'essayerai avec le softwareSerial

Non c'est plutot l'inverse qu'il faut faire.
Si ton code marche en Serial, alors tu pourras le migrer en Soft, car tu seras sur de son fonctionnement.

sinon au passage c'est quoi l'application? le but final?

Ah ok !

C'est pour mon PPE (projet de fin d'année de Terminal en Sciences de l'ingé)

Le but c'est de commander un bateau télécommandé et que lorsqu'il s'éloigne trop, il fait marche arrière ou demi tour. J'ai acheté un bateau mais je n'arrivais pas à analyser la carte mère donc j'ai tout viré avec comme projet de remplacer tout ca par des cartes arduino et des modules bluetooth. J'ai besoin d'une portée faible pour pouvoir faire mes test sans avoir besoin de trop d'espace =)

Donc en fait, la mon code allume et eteint une led mais il va falloir que je le modifie pour qu'il puisse envoyer les valeurs d'un joystick et commander un servo et un moteur en fonction =)

Ok, bon après ça dépend à quel niveau de détail tu comptes rentrer dans le projet mais ça va te prendre pas mal de temps :smiley:

Comment comptes tu faire pour

que lorsqu'il s'éloigne trop, il fait marche arrière ou demi tour

?

Bah étant donné que je suis en terminal, on va pas aller très loin =P

Inverser le sens de rotation du moteur ? =P

Franchement on y a pas encore penser pour l'instant on essaye de reconstruire le bateau surtout