Connessione bluetooth tra hc-05 e hc-06

Salve ragazzi, sto cercando di far comunicare un arduino uno (dotato del modulo hc-05) e un attiny85(dotato del modulo hc-06) tra di loro, ma riscontro dei problemi nella recezione da parte dell'arduino uno, poichè oltre a visualizzare punti interrogativi nel monitor seriale, quando riceve il dato corretto, non esegue il comando di accendere un led
sketch nell'attiny 85

#include <SoftwareSerial.h>
SoftwareSerial mySerial(0, 1); // RX, TX
int bottone = 2;
int led = 3;
int statobottone;
int statobottoneprecedente;
int contatore;
void setup ()
{
  mySerial.begin(9600);
  pinMode (bottone, INPUT_PULLUP);
  pinMode (led, OUTPUT);
}
void loop ()
{
  statobottoneprecedente = statobottone;
  statobottone = digitalRead(bottone);
  if (statobottone != statobottoneprecedente)
  {
    if (statobottone == LOW)
    {
      mySerial.print ("1");
      digitalWrite (led, LOW);
    }
    else
    {
      digitalWrite (led, HIGH);
    }  
  }
}

sketch nell'arduino uno

#include <SoftwareSerial.h>
int data=0;
SoftwareSerial BTSerial(10, 11); // RX | TX
void setup()
{
  
   pinMode(2, OUTPUT);
 
  Serial.begin(9600);

  BTSerial.begin(9600);  
}

void loop()
{
  
  if (BTSerial.available())
  delay(100);
    Serial.write(BTSerial.read());
    delay(100);
    if(Serial.available() >0){
    data = Serial.read();
    delay(400);
    Serial.print(data);
    delay(400);
    if(data == "1"){             
      digitalWrite(2, HIGH);
      delay(300);
      Serial.write("on\n");         
    }
  

   
}}

Quando avvio il monitor seriale visualizzo una serie di punti interrogativi, e nel momento in cui trasmetto con l'attiny visualizzo una serie di uno, ma comunque l'arduino non accende il led,
i collegamenti sono stati fatti esattamente come descritto in vari topic nel forum, il baud rate è stato impostato uguale per tutti e due i moduli, ho provato anche a cambiarlo ma comunque visualizzo i punti interrogativi, non capisco perchè l'arduino non esegue il comando una volta ricevuto quella serie di 1 qualcuno può aiutarmi?

Il confronto è errato, ricevi un carattere non una frase (stringa)
if(data == "1"){
quindi devi scrivere apici singoli
if(data == '1'){

P.S. che senso hanno tutti quei delay() di ritardo ?

Non solo, fa anche troppe read
Ogni read toglie dal buffer di ricezione
Quindi la prima, che serve solo per una print si "mangia" il comando..

Jakex:
oltre a visualizzare punti interrogativi nel monitor seriale, quando riceve il dato corretto, non esegue il comando di accendere un led

Intanto prova ad indentare per bene (Ctrl-T nell'IDE) e già forse ti accorgi di qualcosa... Ossia su Arduino fai questo (ti ho indentato e messo i commenti):

void loop()
{
  // Se ci sono dati in arrivo da BT
  if (BTSerial.available())
    // Pausa da 100ms e basta.
    delay(100);
  // Leggo un byte da BT (e se non ci sono dati cosa scrive secondo te??) e lo scrivo sulla seriale
  Serial.write(BTSerial.read());
  // Altra pausa (inutile) da 100ms
  delay(100);
  // Se ricevo dati dalla seriale
  if(Serial.available() >0){
    // Leggo un carattere/byte
    data = Serial.read();
    // Attendo 400ms (??)
    delay(400);
   // e lo rimando indietro alla stessa seriale (??)
    Serial.print(data);
    // Attendo ancora altri 400ms (??)
    delay(400);
    // Se ho mandato un 1 (devi impostarlo come carattere!!!)
    if(data == '1')
    {
      // allora alzo il pin 2
      digitalWrite(2, HIGH);
      // Attendo altri 300ms (aridaje! :-))
      delay(300);
      // E sulla seriale rispondo
      Serial.write("on\n");         
    }
  }
}

Quindi:

  1. non devi leggere dati da BTSerial se non ci sono dati (ti manca una coppia di graffe come vedi!!)
  2. se leggi byte devi confrontare byte, non puoi confrontare un int con una stringa ("1" è una stringa, '1' è un carattere/byte)!
  3. nel tuo sketch il pin 2 lo alzi solo quando tu MANDI un '1' all'ATtiny (o meglio, secondo me pensavi di mandarlo, ma in realtà lo rimandi alla tua stessa seriale...), non quando lo ricevi, e questo, stando alla tua descrizione, NON è quello che volevi fare mi pare...

Per cui suppongo che questo loop sia quello che volevi cercare di fare (ti ho lasciato qualche delay ma per me sono inutili):

void loop()
{
  // Gestisco i dati da Bluetooth
  if (BTSerial.available()) 
  {
    data = BTSerial.read();
    delay(100);
    Serial.write(data);
    // Se ho ricevuto il carattere '1' accendo il pin
    if(data == '1')
    {
      digitalWrite(2, HIGH);
      Serial.write("on\n");
    }
    // Se ho ricevuto il carattere '0' spengoil pin
    if(data == '0')
    {
      digitalWrite(2, LOW);
      Serial.write("off\n");
    }
  }
  // Gestisco i dati dal monitor seriale, da mandare all'ATtiny
  if(Serial.available()){
    data = Serial.read();
    // Leggo il carattere e lo mando al BT
    BTSerial.print(data);
    delay(100);
  }
}

Standardoil:
Non solo, fa anche troppe read
Ogni read toglie dal buffer di ricezione

No, sono due seriali diverse (BTSerial e Serial).

Vero
Chiedo scusa, digestione pesante...