Communication de HC-05

Bonjour,

Je souhaite faire communiquer deux modules bluetooth HC-05 : le master lit la tension d'un potentiomètre et l'envoie au slave pour commander un servo-moteur.

Les modules sont déjà paramétrés et il ne me manque que les commandes qui envoie les valeurs d'un module à l'autre.

Pour le moment, ils communiquent partiellement (le slave reçoit les valeurs 0, 248 et parfois 120) selon le code utilisé mais ne reçoit pas les valeurs souhaités (entre 0 et 256)

Les deux codes sont en dessous, merci d'avance :smiley:
Si besoin, je peux joindre des schéma du circuit.

//MASTER

int valPot=0; //variable pour récupérer la tension aux bornes du potentiomètre traduite par le CAN . On l’initialise à 0.

void setup() {
  Serial.begin(38400); //Initialisation de la communication avec la console
}

void loop() {
  valPot=analogRead(A0); //lit la tension, la convertit en valeur numérique et la stocke dans valeurPot
  Serial.write(valPot/4);
  Serial.println(valPot/4);
  
}
//SLAVE

#include <Servo.h>
Servo MyServo;
unsigned int vit = 0;
int vitmap = 0;

#define ent 9

void setup() {

pinMode(ent, OUTPUT);  // put your setup code here, to run once:
MyServo.attach(ent);
Serial.begin(38400);

}

void loop() {

  vit = 0;
  while (Serial.available() >=1) {
    vit = Serial.read();
    Serial.println(vit);
    delay(10);

  }

delay(10);
MyServo.write(vit);

}

Il n'y aurait pas un conflit de liaisons série ici :

    vit = Serial.read();
    Serial.println(vit);

La lecture se fait sur le HC05, mais tu veux faire l'écriture sur la console ?

Quels arduinos utilises-tu ? Comment sont branchés les modules ?

Justement, j'ai cru comprendre que ça posait problème mais ne comprend pas pourquoi, ni comment je peux vérifier les valeurs que je reçoit autrement.

J'utilise deux Arduino Uno

Le montage :

  • Sur le master
    potentiomètre -> A0
    RX -> 1
    TX -> 0
    Tous les VCC -> 5V
    Tous les GND -> GND

  • Sur le slave :
    Moteur -> 9
    RX -> 1
    TX -> 0
    Tous les VCC -> 5V
    Tous les GND -> GND

Les modules Bluetooth HC05 & 06 communiquent via la liaison série. L'Arduino communique avec le PC aussi via cette liaison (pour téléverser un programme ou utiliser la console). Si tu as besoin de faire les deux en même temps et que tu utilises la même liaison, il y a conflit. Sur le Uno, les broches sont les RX (pin 0) et TX (1).

Pour éviter le conflit, il faut utiliser un autre port série pour le Bluetooth. Su le Mega, il y en a plusieurs, mais pas sur les autres Arduino, donc il faut en créer un virtuel : c'est ce que fait le bibliothèque SoftwareSerial.

Tu déclares un nouveau port série, tu lui donnes un nom et tu l'utilises comme le port série habituel. Regarde les exemples, tu comprendras mieux

J'ai créer dans chacun de mes programmes un port série qui s'appelle bluetooth.
J'ai essayé d'envoyer ma valeur grâce aux commandes bluetooth.write() et bluetooth.print() (car j'ai vu que parfois bluetooth.write() pouvait causer des problèmes) mais je reçoit toujours la même valeur : -1.
Et je ne comprend pas où est le problème...

//MASTER
#include <SoftwareSerial.h>

SoftwareSerial bluetooth(5, 6); // RX, TX
int pot = A0; 

void setup() {
  Serial.begin(38400);
  bluetooth.begin(38400);
  }

void loop() { // run over and over
    int val = analogRead(pot)/4;
    bluetooth.print(val);
    
    delay(20);
}
//SLAVE
#include <SoftwareSerial.h>
SoftwareSerial bluetooth(5, 6); // RX, TX
const int potentiom = 0;

void setup ()
{
  
  Serial.begin(38400); 
  bluetooth.begin(38400);
}
void loop(){
  Serial.println(bluetooth.read());
  delay(10);
}

Merci de prendre du temps pour m'aider :slight_smile:

Je te conseille de t'inspirer de ce lien , partie "How to send and receive numbers"