Hola a todos,
Estoy haciendo un barrido utilizando arduinos nano conectados via bluetooth, mediante módulos HM10. (1 nano master, 2 nanos esclavos cada uno de estos 3 con su modulo HM10). Este barrido consiste en conectarme y desconectarme entre el master y los esclavos mediante comandos AT. Primero me conecto al esclavo 1, me desconecto, luego me conecto al esclavo 2, me desconecto, me conecto al 1 otra vez, me desconecto, me conecto de vuelta al esclavo 2, me desconecto y así repetidamente. Con el código que hice, con una "C", me conecto al esclavo 1 y con una "D" me conecto al esclavo 2. Con una "j" me desconecto.
El problema que tengo es que no logro una respuesta correcta al "AT+CONxxxx", ya que el master no se conecta al esclavo que yo indico en el programa, sino que se conecta a cualquiera de los 2 aleatoriamente. Quisiera saber por qué ocurre esto (si es por un error de programación, si no es la manera correcta para hacer la conexión y desconexión de los HM10 o el motivo que sea) y de qué forma podría hacerlo funcionar de manera correcta.
A continuación dejo los códigos.
Código master
String nombreHM10="SHSd1";
#include <SoftwareSerial.h>
SoftwareSerial BT1(2, 3); // RX | TX
char i,p;
void setup() {
Serial.begin(9600); //Velocidad del serie
BT1.begin(9600); //Velocidad del serie por software
//Configuracion inicial
BT1.write("AT+RENEW");
delay(200);
BT1.write("AT+NAME");
BT1.print(nombreHM10);
delay(200);
BT1.print("AT+ROLE1"); //Cofiguro como master
delay(200);
BT1.print("AT+RESET");
delay(200);
BT1.print("AT+CON508CB16A761C"); // empieza conectandose al HM10 esclavo 1
delay(200);
}
void loop() {
if (Serial.available()) //Le mande dato?
{ p = Serial.read(); //Lo lee
BT1.print(p); //Lo manda por bluetooth
//SI EL MASTER ENVIA UNA "D" SE CONECTA EL ESCLAVO 2
if(p=='D') //Es D?
{
//COMANDOS AT PARA CONECTARME AL ESCLAVO 2
BT1.write("AT+RENEW");
delay(200);
BT1.print("AT+ROLE1"); //Como master
delay(200);
BT1.print("AT+RESET");
delay(200);
BT1.print("AT+CON508CB16A4B11");
delay(200);
}
}
//SI EL MASTER ENVIA UNA "C" SE CONECTA EL ESCLAVO 1
if(p=='C') //Es C?
{ //COMANDOS AT PARA CONECTARME AL ESCLAVO 1
BT1.write("AT+RENEW");
delay(200);
BT1.print("AT+ROLE1"); //Como master
delay(200);
BT1.print("AT+RESET");
delay(200);
BT1.print("AT+CON508CB16A761C");
delay(200);
}
}
//SI EL MASTER RECIBE UNA "j" SE DESCONECTA DEL ESCLAVO
if (BT1.available()) //Llegó dato?
{ i = BT1.read() ; //Lo lee
Serial.print(i); //Lo imprime
if(i=='j') //Es j?
{
//COMANDOS AT PARA DESCONECTARME
BT1.print("AT"); //lo resetea
delay(200);
BT1.print("AT+RENEW");// lo pongo de fabrica
delay(200);
BT1.print("AT+RESET");// reseteo para aplicar los cambios
delay(200);
}
}
delay(100);
}
Código esclavo
String nombreHM10="SHSd1";
#include <SoftwareSerial.h>
SoftwareSerial BT1(2, 3); // RX | TX
char i,p;
void setup() {
Serial.begin(9600); //Velocidad del serie
BT1.begin(9600); //Velocidad del serie por software
//Configuracion inicial
BT1.print("AT+RENEW");
delay(200);
BT1.print("AT+NAME");
BT1.print(nombreHM10);
delay(200);
BT1.print("AT+ROLE0"); //Como esclavo
delay(200);
BT1.print("AT+RESET");
delay(200);
}
void loop() {
if (Serial.available())
{ p = Serial.read(); //Lee el serie
BT1.print(p); //Manda el dato por bluetooth
}
if (BT1.available())
{ i = BT1.read() ; //lee el dato
Serial.print(i); //Lo imprime
}
}
Muchas Gracias.