Bonsoir,
Pour commander mon réseau, je vais utiliser mon téléphone, et communiquer en BT avec un HC-O6 connecté à un Arduino Mega.
Mon appli envoie une ligne de commande sous forme de chaine de 7 caractères, plus un point-virgule qui indique la fin de la commande.
Les 7 premiers caractères sont (1) un chiffre pour indiquer le module (et envoyer la commande sur un autre Arduino), (2) une lettre pour distinguer le type (Relais, Alimentation via L298, Signal, Moteur d'aiguillage, Eclairage de bâtiment ou de rue), puis un numéro sur 4 chiffre, puis un état (Marche/Arrêt, Gauche/Droite...).
Ça fonctionne... mais c'est lentissime ! De l'ordre de 1 à 2 secondes entre l'appui sur le "bouton" de l'appli et le basculement des relais dans le cadre de mon essai avec 16 relais.
Mon code Arduino :
#define hc06 Serial3 // définition de hc06 comme un objet série sur le port Serial3 (broches Rx3, Tx3)
const byte relais_1 = A7;
const byte relais_2 = A6;
const byte relais_3 = A5;
const byte relais_4 = A4;
const byte relais_5 = A3;
const byte relais_6 = A2;
const byte relais_7 = A1;
const byte relais_8 = A0;
const byte relais_16 = 22;
const byte relais_15 = 24;
const byte relais_14 = 26;
const byte relais_13 = 28;
const byte relais_12 = 30;
const byte relais_11 = 32;
const byte relais_10 = 34;
const byte relais_9 = 36;
String commande_recue=""; // création et initialisation à "" d'une chaine de caractères pour les caractères reçus du HC-06 et former la commande
byte num_relais; // création d'une variable contenant le numéro de relais reçu du HC-06
void setup()
{
hc06.begin(9600); // initialise le port série Bluetooth
// ci-dessous définition des broches
pinMode(relais_1, OUTPUT);
pinMode(relais_2, OUTPUT);
pinMode(relais_3, OUTPUT);
pinMode(relais_4, OUTPUT);
pinMode(relais_5, OUTPUT);
pinMode(relais_6, OUTPUT);
pinMode(relais_7, OUTPUT);
pinMode(relais_8, OUTPUT);
pinMode(relais_9, OUTPUT);
pinMode(relais_10, OUTPUT);
pinMode(relais_11, OUTPUT);
pinMode(relais_12, OUTPUT);
pinMode(relais_13, OUTPUT);
pinMode(relais_14, OUTPUT);
pinMode(relais_15, OUTPUT);
pinMode(relais_16, OUTPUT);
// ci-dessous mise à l'état HIGH des relais pour les mettre au repos (fonctionnement inversé) :
digitalWrite(relais_1, HIGH);
digitalWrite(relais_2, HIGH);
digitalWrite(relais_3, HIGH);
digitalWrite(relais_4, HIGH);
digitalWrite(relais_5, HIGH);
digitalWrite(relais_6, HIGH);
digitalWrite(relais_7, HIGH);
digitalWrite(relais_8, HIGH);
digitalWrite(relais_9, HIGH);
digitalWrite(relais_10, HIGH);
digitalWrite(relais_11, HIGH);
digitalWrite(relais_12, HIGH);
digitalWrite(relais_13, HIGH);
digitalWrite(relais_14, HIGH);
digitalWrite(relais_15, HIGH);
digitalWrite(relais_16, HIGH);
}
void loop()
{
_______________________________________________________________
// Lecture du HC06
if(hc06.available())
{
commande_recue = hc06.readStringUntil(';');
if ((commande_recue[0]=='4')&&(commande_recue[1]=='R')) // Si le 1er caractère de la commande est ' (n° de module) et le 2e est 'R' (relais)
{
num_relais=((byte)commande_recue[4]-48)*10+((byte)commande_recue[5]-48); // Reconstitution du n° de relais
switch (num_relais) // On prend le bon numéro de pin relais via la variable
{
case 1:
pin_relais=relais_1;
break;
case 2:
pin_relais=relais_2;
break;
case 3:
pin_relais=relais_3;
break;
case 4:
pin_relais=relais_4;
break;
case 5:
pin_relais=relais_5;
break;
case 6:
pin_relais=relais_6;
break;
case 7:
pin_relais=relais_7;
break;
case 8:
pin_relais=relais_8;
break;
case 9:
pin_relais=relais_9;
break;
case 10:
pin_relais=relais_10;
break;
case 11:
pin_relais=relais_11;
break;
case 12:
pin_relais=relais_12;
break;
case 13:
pin_relais=relais_13;
break;
case 14:
pin_relais=relais_14;
break;
case 15:
pin_relais=relais_15;
break;
case 16:
pin_relais=relais_16;
break;
default:
hc06.println("Mauvaise commande");
break;
}
switch (commande_recue[6]) // Et l'état de pin relais selon la commande
{
case 'R':
etat_pin_relais=1;
break;
case 'T':
etat_pin_relais=0;
break;
default:
hc06.println("Mauvaise commande");
break;
}
digitalWrite(pin_relais, etat_pin_relais); // On envoie la commande
}
}
}
Auriez-vous une explication et... une solution ?
Merci d'avance !!!