He creado un tacógrafo óptico, usando una tarjeta Arduino Uno y funcionaba bien al principio. Pero he decidido dejar de usar la pantalla del ordenador para presentar los resultados y usar la pantalla del móvil exclusivamente como display para presentar la velocidad de giro (y otras variables).
Con el Bluetooth la comunicación funciona bien. He hecho una App para el Smartphone con App Inventor para recibir los datos y presentarlos.
Aquí es donde surgió el problema. El problema es separar los datos cuando se reciben en el móvil. (Separar un valor de otro).
He probado usando separador (-1) también una letra, un punto y coma, ... Y el problema es cómo conseguir que el App Inventor detecte que ese byte no es un dato sino un elemento de control para separar datos.
He leido algo del DelimiterByte y creo que es esta la solución, pero no me funciona.
He visto un foro de un tal Kent que transmite textos enteros y después usa la función Split de App Inventor para separar las distintas variables, pero él mismo dice que no le funciona bien.
Yo al final para salir del paso he pasado la variable a texto de 3 caracteres antes de enviarla y he puesto en el App Inventor que reciba texto (3 caracteres exclusivamente) y va funcionando bien pero es una chapucilla.
Cuando la variable es menor que 100 (no tiene 3 caracteres) añado ceros a la izquierda para conseguir los preciados 3 bytes y evito errrores en la recepción.
I’ve built a optical tachometer to display the speed of a small revolving project.
I am using Arduino Uno, a LED, and a LDR to detect the light.
It works alright and updates every 2 seconds, in the screen of the computer, four data: the last value of the LDR; the precise time (ms); the number of turns and, of course, the most important: the speed (rpm).
I decided to remove the computer and use my smartphone just to receive and show the variables. I am using a HC-05 bluetooth module attached to the Arduino board to transmit data and I’ve created myself an App for the mobile using App Inventor.
Here the problems began.
There is no problem sending data via Bluetooth and there is no problem receiving the data in the Smartphone.
The problem is once you receive the data in the mobile, how in the earth you can separate a single variable from the next. The way I am using is mainly wrong because usually mix one single data with the next, specially if they have different number of digits.
I tried out the DelimiterByte function of App inventor and I failed.
I tried to use a letter to separate data (letter z) and I could not reach the solution.
I tried too the codes: “\0” “\t” “\n” and so the println() function of Arduino and always failed.
The problem for me is when the App Inventor receives data how can I ‘teach’ it that some data are no to be displayed because are control data to separate variables.
I have no idea about "App inventor", but when you send data via any medium, you send it in "packets" which include a "header" at the start of each line - an alphabetic code which denotes the nature of the following data. Then each data value is separated by a delimiter - usually a comma or a semicolon - a character which is never a part of the actual data or header. Often, you add a checksum to prove that the data was sent accurately and completely (and have a mechanism for acknowledging or rejecting such data).
In this manner, the line terminator no longer matters; it may merely indicate to the transmitter the imperative of sending the particular packet of data.