Necesito ayuda para recibir datos y filtrar 18 datos numericos desde modulo HC 06

Hola! He estado trabajando en una app para mi proyecto final, la idea inicial era utilizarla para recibir datos enviados desde un dispositivo que realiza encuestas y envía desde el modulo Bluetooth HC 06 valores solo numericos. Vi varios tutoriales basicos de como recibir textos como "Hola1", eso en un principio para mi app funcionaba bien. A medida que investigue más, decidi que solo quería numeros; para ello utilicé la función Serial.print en Arduino, este sería así:
Serial.print(valor1);
Serial.print("|");
Serial.println(valor2);
Serial.print("|");
Serial.println(valor3);
...
Serial.print("\n");
delay(300);
El total de valores es 18 variables que necesito recibir, utilicé el metodo de separar a partir de "|" y también ",". Ninguno funciona como corresponde. Leí varias consultas parecidas, como esta App inventor. Bluetooth, Arduino y App Inventor. Básico. Arduino envía información a App Inventor.
y también probe el metodo para recibir con la funcion "Recibir Bytes sin Signo", como explica este ejemplo:
App inventor - Bluetooth Servidor - Cliente con móviles. Estudio.


Pero aunque intente no toma las variables del valor 1, 2, 3..., 18., solo se muestra por un par de sgundos numeros y signos al azar que no corresponde a ningun valor enviado desde el Serial de Arduino, es por ello que escribo por primera vez aquí. Necesito ayuda urgente, si necesitan mayor información por favor no dude en responder y contestare lo más rapido que pueda!! Muchas gracias.. :slight_smile:

If you want to send 18 numbers on a single line separated by '|', do NOT do any println() until the 18th number has been sent.

If you check your transmission code like I did, you will see the offending println() calls.

Here is general advice for receiving text on bluetooth:

Please see the Delimiter article in FAQ

Be sure to use println() at the end of each message to send from the sending device, to signal end of message. Do not rely on timing for this, which is unreliable.

In the AI2 Designer, set the Delimiter attribute of the BlueTooth Client component to 10 to recognize the End of Line character.
BlueToothClient1_Properties
Also, return data is not immediately available after sending a request,
you have to start a Clock Timer repeating and watch for its arrival in the Clock Timer event. The repeat rate of the Clock Timer should be faster than the transmission rate in the sending device, to not flood the AI2 buffers.

In your Clock Timer, you should check

  Is the BlueTooth Client still Connected?
  Is Bytes Available > 0?
     IF Bytes Available > 0 THEN
       set message var  to BT.ReceiveText(-1) 

This takes advantage of a special case in the ReceiveText block:

ReceiveText(numberOfBytes)
Receive text from the connected Bluetooth device. If numberOfBytes is less than 0, read until a delimiter byte value is received.

If you are sending multiple data values per message separated by | or comma, have your message split into a local or global variable for inspection before trying to select list items from it. Test if (length of list(split list result) >= expected list length) before doing any select list item operations, to avoid taking a long walk on a short pier. This bulletproofing is necessary in case your sending device sneaks in some commentary messages with the data values.

Finalmente funciona perfecto, muchas gracias!

tengo el mismo problema que tu tenias , como lo solucionaste

If you have the same problem, maybe the same solution works for you?
If not provide more details.

The app gives me the values ​​received, but not in order and not in their places, for example sometimes it gives me the temperature values ​​first and sometimes it gives me the humidity values ​​first, and sometimes it sort of makes cuts..., I I tried to consider delay in the programming, and change the time in the app but nothing, I copied the same bulletins as many people in the community but it doesn't work, IT'S URGENT, I have to hand in the assignment in 3 days

1
2
3

Read post nr. 2 in this thread, and change your block according to what it says.

, I did all that , but i dnt understand how todo put Recieve Text (-1) in muy blocks

pff

Instead of what you have at numeroDeBytes, put -1 there, and do not forget to set the delimiter byte in the design to 10. Look again at what ABG wrote.
What is your timer interval at the Clock timer and what is the transmission rate of your Arduino?

33
it works finally , thaaaaaaank you soooooo much <3 , i put the-1 , and the clock i have it in 800 (it is good or i have to change it ?)

Fine! The clock should be slightly faster than the transmission rate. If it works, it is probably fine.

1 Like