No se porque se alenta la placa al reconectarla

Hola que tal, pues ya estoy algo deseperadoy es que no logro hacer funcionar correctamente a la placa arduino mini leonardo.

Lo que estoy haciendo es que al recibir de un BTHC05 un dato reaccione de cierta forma y lo logro, el gran peroooooo es que cuendo recien programo mi placa sin desconectar al puerto serie todo bien, despues cuando simulo la perdida de orriente y vuelvo a conectar al puerto serie, la placa ya no recibe del BTHC05 nada de nada y pues obvio todo se vienen abajo.

Les paso mi código, espero puedan ayudarme por si les ha pasado o una solución. :frowning:

#include <Keyboard.h>
 #include <SoftwareSerial.h>
 SoftwareSerial BT1(8, 9); // RX | TX

void setup()
{
//Serial.begin(9600);
//Serial.println("Iniciando!");
 //Keyboard.begin();
  BT1.begin(9600); 
}
 
void loop()
{

 if (BT1.available()) {
 char dato= BT1.read();
if (dato=='A') {
  Keyboard.begin();
Serial.println("Iniciando secuencia de descarga");
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('q');
Keyboard.releaseAll();
//delay(20000);
//Keyboard.press(KEY_LEFT_ARROW);
//Keyboard.releaseAll();
//delay(20000);
//Keyboard.press(KEY_RETURN);
//Keyboard.releaseAll();
delay(1400);
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('o');
Keyboard.press('d');
Keyboard.releaseAll();
delay(2000);
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(2000);
   Keyboard.press(KEY_LEFT_ARROW);
Keyboard.releaseAll();
delay(2000);
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(2000);
Keyboard.write(' ');
Keyboard.releaseAll();
delay(2000);
Keyboard.write(' ');
Keyboard.releaseAll();
delay(100);
Keyboard.press(KEY_TAB);
delay(100);
Keyboard.releaseAll();
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(100);
Keyboard.press(KEY_RIGHT_SHIFT);
Keyboard.press(KEY_F100);
  Keyboard.releaseAll();
   delay(100);
   Keyboard.press(KEY_DOWN_ARROW);
Keyboard.releaseAll();
delay(2000);
Keyboard.press(KEY_DOWN_ARROW);
Keyboard.releaseAll();
delay(2000);
Keyboard.press(KEY_DOWN_ARROW);
Keyboard.releaseAll();
delay(2000);
  Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
delay(2000);
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('a');
  Keyboard.releaseAll();
   delay(2000);
Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
delay(2000);
   Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press('v');
  Keyboard.releaseAll();
   delay(200);
Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
delay(200);
Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
delay(100);
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('r');
  Keyboard.releaseAll();
   delay(2000);
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('a');
  Keyboard.releaseAll();
   delay(300);
    Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
delay(200);
   Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press('v');
  Keyboard.releaseAll();
   delay(2000);
Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
delay(300);
Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
delay(200);
//Keyboard.press(KEY_LEFT_ALT);
//Keyboard.press(KEY_F4);
//Keyboard.releaseAll();
 //delay(200);
  Keyboard.press(KEY_LEFT_ALT);
Keyboard.press(KEY_F4);
  Keyboard.releaseAll();
   delay(200);
   Keyboard.end();
}
 
if (dato=='B') {
  Keyboard.begin();
Serial.println("Iniciando secuencia de programacion");
delay(2000);
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('q');
Keyboard.releaseAll();
//delay(20000);
//Keyboard.press(KEY_LEFT_ARROW);
//Keyboard.releaseAll();
//delay(20000);
//Keyboard.press(KEY_RETURN);
//Keyboard.releaseAll();
delay(7000);
Keyboard.press(KEY_TAB);
Keyboard.releaseAll(); 
delay(200);
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(200);
Keyboard.write(' ');
Keyboard.releaseAll();
delay(200);
Keyboard.write(' ');
Keyboard.releaseAll();
delay(100);
Keyboard.press(KEY_TAB);
delay(100);
Keyboard.releaseAll();
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(1000 );
Keyboard.press(KEY_BACKSPACE);
delay(100);
Keyboard.releaseAll();
Keyboard.print("REFRIGERADO MXN-1005 (3100517)");
delay(200);
Keyboard.end();
Keyboard.press(KEY_TAB);
delay(100);
Keyboard.releaseAll();
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(100);
Keyboard.write(' ');
Keyboard.releaseAll();
delay(200);
Keyboard.write(' ');
Keyboard.releaseAll();
delay(200);
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(100);
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(100);
Keyboard.print("1");
Keyboard.releaseAll();
delay(100);
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(100);
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(100);
Keyboard.write(' ');
Keyboard.releaseAll();
delay(200);
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(100);
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(100);
Keyboard.print("7");
Keyboard.releaseAll();
delay(100);
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(100);
Keyboard.print("0");
Keyboard.releaseAll();
delay(100);
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(100);
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(100);
Keyboard.write(' ');
Keyboard.releaseAll();
delay(200);
Keyboard.write(' ');
Keyboard.releaseAll();
delay(200);
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(100);
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(100);
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(100);
Keyboard.press(KEY_TAB);
Keyboard.releaseAll();
delay(100);
Keyboard.write(' ');
Keyboard.releaseAll();
delay(7000);
  Keyboard.press(KEY_LEFT_ALT);
Keyboard.press(KEY_F4);
  Keyboard.releaseAll();
   delay(200);
      Keyboard.end();
}
 
//delay(6000);
  //Keyboard.print("\n");
}
Serial.println("Esperando");
}

No tengo Leonardo pero siempre la solución ha sido esta

Serial.begin(9600);
  while (!Serial); // wait for serial port to connect. Needed for Leonardo only

Ya se que nada tiene que ver ton tu BT pero intenta a ver si sirve.
Igualmente porque para ver si funciona no quitas esas dos tremendas secuencias con delays y solo miras que se recibe via BT?

Algo asi

#include <Keyboard.h>
#include <SoftwareSerial.h>
SoftwareSerial BT1(8, 9); // RX | TX

void setup()
{
  Serial.begin(9600);
  while (!Serial);
  Serial.println("Iniciando!");
  //Keyboard.begin();
  BT1.begin(9600); 
}

void loop()
{

   if (BT1.available()>0) {
       char dato= BT1.read();
       Serial.print(dato);
   }
}

Hola revisando todo, me doy cuenta que se trata de un error de comunicacion por serie, con el código que me dejaste, lo cargué, desconecte del puerto serie y reconecte y lo que sucedio es que para cualquier dato que mando por BT, recibo la letra ÿ

Esto es lo que me sale por serial:

Iniciando!
ÿÿÿÿÿÿÿÿÿ

No se como resolver esto, lo que no entiendo es por que al recien programar todo esta perfecto y cuando simulo la perdida de energía y reconecto recibo el char ÿ.

Probe todas las velocidades posibles de Baudrate, ese punto podemos descartarlo.

Porque no intentas regenerar el arranque del objeto BT1
En el setup pusiste

BT1.begin(9600);

cuando sepas que perdiste contacto intenta (es una idea que no se si sirva) volver ha ejecutar

BT1.begin(9600);

asegúrate que sea una vez, o sea comprobada la perdida reestableces conexión.

Lo que preguntas es nuevo y yo lo hubiera hecho con un modulo que disponga de dos series y no uno virtual como estas intentando.