Saber si Bluetooth HC-05 se desconecta.

Hola!

Estoy en un proyecto con un bluetooth HC-05 (uno de los más comunes para arduino).

Quiero programar, un código de seguridad si el bluetooth se desconecta, de forma que el arduino lo detecte automáticamente y reaccione.

Hay una manera de saber si el bluethoot está desconectado?

Me refiero a una especie de señal o algo así, he buscado por internet y no he encontrado nada.

Seguiré buscando y si encuentro la respuesta lo comento.

Gracias a todos los que colaboréis.

A que se desconecta te refieres a que pierde la comunicación? por qué no envías cada x tiempo un código de confirmación de conexión, y cuando pase x tiempo sin recibir ese código es porque la conexión se ha perdido.

También lo podrías detectar con timeout que salte si no ha recibido ningún dato en x tiempo, eso ya depende de la aplicación que tengas y si está periódicamente enviando datos o no, o si los datos que recibes son críticos.

Un saludo!

Gracias Dani!

La verdad es que tal como lo has explicado suena super simple, no se porqué no he caído en lo de código de confirmación.

Pero me convence mas la función de timeout que propones, ya que estoy enviando datos todo el tiempo, voy a estudiar a ver que encuentro sobre ella, que no había oído hablar de ella.

Un Saludo!

Si estas enviando datos todo el tiempo hazlo con el timeout, simplemente cada vez que recibas un dato por el serial reinicias un contador y mientras no reciba que vaya incrementándose constantemente y cuando este sobrepase un cierto valor (aquí es donde tienes que investigar timers y ver que tiempo quieres) que salte alarme de desconexión del bluetooth y ya actúas en consecuencia.

He leido que serial.read envía un -1 si no hay datos.

entonces supongo que esto podría funcionar no?

(no se si es lo que se entiende por un timeout)

 if(Serial.available() > 0)
 {
   dato = Serial.read(); // .read envia un -1 si no lee nada
  }

if (dato = -1)
{
  cuenta=cuenta+1;
}
else
{
  cuenta=0
}


if (cuenta>100)
{
  actuar
}

Gracias por la ayuda!!

Es una opción hacerlo así, lo que realmente tienes que tener en cuenta es que al recibir un dato resetees ese contador a 0.

Yo lo que hago es programar un timer para que salte cada x segundos, como por lo general no dan para mucho cada vez que se acciona la interrupción del timer incremento un contador y cuando ese contador ha llegado a cierto valor (por lo general meto un timeout de unos 20-30s sin comunicación, esto ya depende del criticismo de tus datos) se acciona la alarma de no comunicación.

Por lo general las recepciones serial las programo por interrupciones, de tal modo que cuando entra un dato por el serial reseteo el valor del contador a 0.

en pseudo código:

Interrupcion Timer:
{
    //Salta cada 500ms porponer un ejemplo
    contador ++;
    if (contador > 40)  // 40 * 500 ms = 20s de timeout
    {
        alarmaNoComunicacion();
    }
}

Interrupcion Serial:
{
    contador = 0;
    dato = leerSerial();
}

Funciona perfecto!

Muchas gracias!

Danicap y Venator una pregunta en los codigos que pusieron que variables tuvieron que crear?

@juyo, crea un nuevo hilo porque este queda cerrado por revivir un hilo nuevo luego de 120 dias sin movimientos.