Problemas conexión y desconexión HM10 y arduino nano por comandos AT

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.

Pues se me ocurre que los dos tienen el mismo nombre. Cuando pones conectar con quien ? No veo esa instruccion.

Creo que tenes que al esclavo tenes que tambien enviarle la direccion mac del master y viceversa. Asi especeficas con quien hacer la conexion.

BT1.print("AT+CON508CB16A761C");
BT1.print("AT+CON508CB16A761C");
BT1.print("AT+CON508CB16A4B11");

Resumindo.
Antes de configurar cual sera el esclavo y master

A llos dos le envias las mac del otro

BT1.print("AT+CON508CB16A4B11"); // no se quien es quuen
BT2.print("AT+CON508CB16A761C

Y aho le pones quien sera el esclavo y master

 BT1.print("AT+ROLE0"); //Como esclavo
 BT2.print("AT+ROLE1"); //Como esclavo

Okey gracias probare con eso