Bon, ça y est, j'ai un code qui fonctionne, avec commande en binaire sur 2 bits.
#define hc06 Serial1 // définition de hc06 comme un objet série sur le port Serial1 (broches Rx1, Tx1)
// ci-dessous définition des noms de broches
const byte pin_relais[] = { A7, A6, A5, A4, A3, A2, A1, A0, 22, 24, 26, 28, 30, 32, 34, 36 };
byte nb_char_rec=0;
byte commande_recue[2]; // création d'un tableau de 2 bytes pour les caractères reçus du HC-06 et former la commande
unsigned int commande;
byte commande_relais; // création d'une variable contenant le numéro de relais reçu du HC-06
byte commande_module; // création d'une variable contenant le numéro de module reçu du HC-06
byte commande_type; // création d'une variable contenant le type de commande reçu du HC-06
byte commande_etat_relais; // création d'une variable contenant la commande d'état reçue du HC-06
void setup()
{
Serial.begin(9600); // initialise le moniteur série (pas nécessaire à termer)
hc06.begin(9600); // initialise le port série Bluetooth
// ci-dessous définition des broches (OUTPUT pour les relais)
for (byte el : pin_relais)
{
pinMode(el, OUTPUT);
digitalWrite(el, HIGH);
}
}
void loop()
{
// Lecture du HC06
if (hc06.available()) // Si des données sont dispos sur le buffer du HC-06
{
commande_recue[nb_char_rec] = (byte)hc06.read(); // On met dans commande_recue[0] ou commande_recue[1]
if(nb_char_rec==1) // Si c'est dans commande_recue[1], c'est qu'on a reçu les deux octets
{ // On peut interpréter les deux octets de la commande
commande=commande_recue[1]*256+commande_recue[0]; // On ré-intègre la commande sur deux octets
commande_module=commande%8192/2048+1; // Le numéro de module sur les bits 11, 12, et 13
commande_type=commande%2048/256; // Le type de commande sur les bits 8, 9 et 10
if ((commande_module == 4) && (commande_type == 3)) // Si le module est n°4 et le type 3 (=Relais)
{
commande_relais=commande%128-1; // Le numéro de relais sur les bits 0 à 6 (numérotation à partir de 1)
commande_etat_relais=!(commande%256/128); // L'état commandé pour le relais sur le bit 7
digitalWrite(pin_relais[commande_relais], commande_etat_relais); // On envoie la commande
}
}
nb_char_rec=!nb_char_rec; // On switche sur l'autre octet
}
}
Pour ce qui est du pourquoi ça marchait pas avec des caractères, et le pourquoi du comment du 7 bits, honnêtement... j'ai laissé tomber, l'essentiel est d'avoir un truc OK !