Using HC-05 to scan several Bluetooth slaves

Hi I've installed a couple of Arduino-Mini + bluetooth slave transmitting data. One on header tank in the loft, one in a dehumidifier. Now I want a data logger to scan them and where I'm going is a Nano driving master HC-05 squirting serial data at a RPi.

The code below is from the Nano and it switches the master HC-05 between the slave addresses. It's a bit clunky on hardware and software because of the steps necessary to change the address. If anyone knows better ways please say.

Richard.

/*

Use HC-05 already configured Bluetooth master.  Switch it between 2 
slave addresses and receive data from each for about a minute.

Ardino output pins can switch the power to the HC-05 and the AT-ena 
(pin-34) connection.

Initially used push-switch to trigger change to next state, that code
remains but now switching after set time.

*/

// Arduino Pins
const int led_red1    =  2;
const int led_red2    =  3;
const int led_red3    =  4;
const int led_red4    =  5;
const int swser_tx    =  7;
const int swser_rx    =  8;
const int hc05_at_ena =  9;
const int hc05_power  = 10;  // Low is power on.
const int sw1         = 11; 

#define BT_On_ 0
#define BT_Off 1

#include <SoftwareSerial.h>

SoftwareSerial mySerial(swser_rx, swser_tx);

int state;
  /* Action for this state
   0 - go to At mode
   1 - set new bind address
   2 - read back bind address
   3 - go to normal mode
   4 - nothing, just let the data flow.
  */

char bt_addrs[2][20] = {"98D3,31,FC1743",   // Loft
                        "98D3,31,FB19A7"};  // Dehumid

int  ix_addrs       = 0;  // index to array of BT addreses
int  next_state     = 0;  // trigger to go to next state
long count_in_state = 0;  // (not used yet, to switch state after data received)

void setup()  
{
  pinMode(hc05_at_ena, OUTPUT);
  pinMode(hc05_power , OUTPUT);
  pinMode(led_red1   , OUTPUT);
  pinMode(led_red2   , OUTPUT);
  pinMode(sw1, INPUT_PULLUP);
  Serial.begin(9600);
  while (!Serial){;}
  delay(500);
  Serial.println("BT2 A");

  mySerial.begin(9600);
  state = 0;
  digitalWrite(hc05_power, BT_Off);
  digitalWrite(led_red1   ,0);
}

void loop()
{
  // data both ways between serial and BT
  while (mySerial.available())
  {
    Serial.write(mySerial.read());
    digitalWrite(led_red2, 1);
    digitalWrite(led_red2, 0);
  }
  
  while (Serial.available())
  {
    mySerial.write(Serial.read());
  }
  //-----end-of-serial-exchange------------

  if (!digitalRead(sw1))
  {
    next_state = 1;
    delay(500); // very crude debounce
  }

  if (next_state)
  {
    next_state = 0;
    
    if (state == 0)
    {
      // Go into AT mode
      // turn bt off
      digitalWrite(hc05_power, BT_Off);    
      digitalWrite(led_red1   ,0);
      delay(500);
      // pin 34 high
      digitalWrite(hc05_at_ena, 1);
      delay(500);
      // turn bt on    
      digitalWrite(hc05_power, BT_On_);    
      digitalWrite(led_red1   ,1);
      delay(500);
      //
      mySerial.begin(38400);
      delay(500);
      state++;
      mySerial.print("at+version\r\n");
    }
    else if (state == 1)
    {
      mySerial.print("at+bind=");    
      mySerial.print(bt_addrs[ix_addrs]);
      mySerial.print("\r\n");
      state++ ;
    }
    else if (state == 2)
    {
      mySerial.print("at+bind\r\n");
      state++ ;
    }
    else if (state == 3)
    {
      // go to normal mode
      // turn bt off
      digitalWrite(hc05_power, BT_Off);    
      digitalWrite(led_red1   ,0);
      delay(500);
      // pin 34 low
      digitalWrite(hc05_at_ena, 0);
      delay(500);
      // turn bt on    
      digitalWrite(hc05_power, BT_On_);    
      digitalWrite(led_red1   ,1);
      delay(500);
      //
      mySerial.begin(9600);
      delay(500);
      state++ ;
    }
    else if (state == 4)
    {
      ix_addrs += 1;
      ix_addrs %= 2;
      state = 0;
    }
    count_in_state = 0;
    
    Serial.print("State: ");
    Serial.print(state);
    Serial.print(" ix: ");
    Serial.print(ix_addrs);
    Serial.print(" ");
  }
  
  // auto-switch to next state
  switch (state)
  {
    case 0:
      if (count_in_state >  5000) {next_state = 1;}
      break;
    case 1:
      if (count_in_state >  5000) {next_state = 1;}
      break;
    case 2:
      if (count_in_state >  5000) {next_state = 1;}
      break;
    case 3:
      if (count_in_state >  5000) {next_state = 1;}
      break;
    case 4:
      if (count_in_state > 60000) {next_state = 1;}
      break;
  }
  count_in_state++;
  delay(1);
}