Go Down

Topic: HC-05 deja de recibir datos tras un tiempo (Read 426 times) previous topic - next topic

Demmy

Buenos días. Escribo para preguntar sobre un problema que estoy teniendo con el módulo de Bluetooth HC-05. La conexión Bluetooth se realiza de forma correcta, a una aplicación Android. Todo funciona bien, recibe y manda datos de forma correcta. El problema está en que después de un tiempo variable, entre los 30 segundos y el minuto, la aplicación Android sigue emitiendo datos pero el arduino no los recibe. No creo que la propia placa Arduino sea el problema, puesto que se siguen mostrando los mensajes de "Test" pero sin mostrar los valores recibidos del Bluetooth. Cuando se dejan de recibir datos del HC-05, al presionar el botón se retoma la conexión. La conexión Bluetooth no llega a cerrarse, puesto que las luces del HC-05 no cambian. Con este código, la desconexión ocurría despues de alrededor de un minuto.

Code: [Select]
void setup() {
  Serial.begin(9600); //Sets the baud for serial data transmission



}

byte data = 0;

void loop() {

if (Serial.available() > 0)
  {

    data = Serial.read();

    Serial.print ("Data: ");
    Serial.println (data);


   
  }

  Serial.println ("Test");
  Serial.write (data);

  delay (100);
  Serial.flush();

}


El HC-05 está conectado a los 5V y la tierra del arduino y a los puertos Tx y Rx del mismo. También probé con aligerar la transimisión de datos aumentando el delay que el Arduino y la aplicación Android compartían entre cada dato emitido. Cualquier ayuda se agradece.

RIG

Buen dia!
Esto que dices aqui:
Quote
También probé con aligerar la transimisión de datos aumentando el delay que el Arduino y la aplicación Android compartían entre cada dato emitido. 
Segun entiendo tu pones un delay en arduino de 100 mlisegundos y pones un delay de 100 milisegundos en tu app y estás mandando datos entre esos 100ms de pausa. Si estoy en lo correcto, te pregunto: ¿como haces para sincronizar la transmisión de datos entre el bluetooth y el arduino para que coincidan exactamente esas pausas? ¿porque pregunto esto?
Veamos, mientras no recibes datos en en serial el arduino hace una pausa de 100ms y despues limpia buffer luego pregunta si hay algo en el puerto y se repite el ciclo, entonces ¿qué pasa si mandas el dato justo cuando el arduino está en otro mundo con ese delay(100); ? pues éste ni se entera!  y justo despues saliendo del delay limpias el buffer por lo que cuando llegas al
Code: [Select]
if (Serial.available>0) ya no hay nada en el serial y por eso ya no se ejecuta ésta instruccion.
Como no veo como funciona tu app es lo que estoy suponiendo, ya que el uso de delay ocasiona problemas en el 99.999% de los codigos (el 0.001%  donde no hay problema es en el hola mundo)

Demmy

La verdad es que simplememte confiaba en que se sincronizaran, y al probarlo ocurria, al menos al principio. El Serial.flush() lo incluí por si de algun modo el buffer del serial se llenaba y dejaba de recibir datos, aunque creo que no funciona así. Por otro lado, el delay en el arduino lo añadí por si acaso algun buffer o algo se llenara, pero hasta donde tengo entendido, no haría falta. Lo extraño es que al comprobar otra vez el programa, he podido ver que cuando el HC-05 deja de leer, primero realiza una corta pausa, luego muestra todas las lecturas que se le habían acumulado en esa pausa, y despues deja de leer definitivamente. Supongo que tampoco es culpa del HC-05 porque es recien comprado, pero tampoco tengo la certeza. Voy a comprobar si eliminando el flush y el delay sigue sucediendo, gracias por la idea.

tauro0221

#3
Jul 10, 2019, 10:09 pm Last Edit: Jul 11, 2019, 03:54 am by tauro0221
Hi,
Como conectas el pin RX al arduino. Recuerda que el RX del HC-05 require un voltaje de 3.3 voltios. Si lo conectas directamente al arduino lo puedes danar. Necesitas un divizor de voltaje de 5 voltios a 3.3 voltios.

Demmy

Leí que hacia falta, pero como también encontré algunos usuarios que lo conectaban directamente, supuse que no era necesario. Lo probaré en cuanto pueda a ver que tal. Sin embargo, no creo que sea el problema, porque parece como si se quedara sin espacio o algo y al pulsar el boton, retoma las lecturas y se pone al día, mostrando datos enviados varios segundos atrás.

Demmy

Comprobé con las resostencias y el problema persiste. Cuando se dejan de recibir datos del HC-05, si pulso el botón de éste, la conexión vuelve durante un rato pero con los valores qie acumuló mientras no mostraba datos.

tauro0221

Hi,
No tines otro modulo de HC-05 para que pruebes si el que estas usando esta intermitente.

Demmy

Ahora mismo no, pero a unas malas podria conprar otra y comprobar si se debe a eso.

Demmy

Cabe mencionar que le envio un byte cada 100 o 200 milisegundos. Alomejor es demasiada información para el HC-05 y se congela por ello.

tauro0221

Hi,
Pregunta: Porque estas haciendo un delay si el formato de "available" lo que hace es esperar a que el HC-05 mande informacion. El se mantiene esperando todo el tiempo hasta que reciba data. Ahora si no recibe data se queda esperando.Tambien estas haciendo un flush despues del delay. Que pasa si durante el delay el HC-05 envia informacion. Si haces el flush hazlo antes del delay. En otras palbras flush y despues el delay. Yo eliminaria ambos comandos para ver si se sigue dejando de  comunicarse.

Demmy

En los ultimos intentos probé a quitarlo y seguía igual, funcionaba bien hasta que parecia como si se quedara sin memoria o algo y dejara de leer.

tauro0221

Hi,
Es posible que el problema es el HC-05. La razon es que estas usando la  instrucion "available" esta instruccion lo  que hace es esperar que el HC-05 este listo para enviarle la informacion. Si el HC-05 no responde/envia la informacion se queda esperando y creo que es lo que estas experimentando.

Demmy

Podria ser. Probare con un HC05 nuevo o un HC06 a ver que tal. Tampoco tengo mucha alternativa porque el HC05 ha dejado misteriosamemte de funcionar asi que que le vamos a hacer.

tauro0221

Hi,
Se me ocurio una prueba y es de cambiar la instruccion  if (Serial.available() < 0){}. Esto lo que va hacer es que se va quedar en el available todo el tiempo y no te va a printear la informacion de la data. Tratalo y si no printea la data quire decir que HC-05 se queda muerto y el arduino esta esperando que el HC-05 este listo para recibir la data.
 

surbyte

#14
Jul 17, 2019, 03:14 am Last Edit: Jul 17, 2019, 03:17 am by surbyte
El problema es Serial.flush() coméntalo y prueba.
Saca tambien ese delay(100). Nada tiene que hacer.
En realidad el codigo esta mal encaminado. Cada vez que se recibe un caracter se ingresa en el if pero jamas tendras toda la cadena enviada en

Code: [Select]
Serial.println ("Test");
  Serial.write (data);


De modo que dos veces imprimis lo mismo

Go Up