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..
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.
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.
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
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?