Go Down

Topic: Conversión de datos -Complemento a topinc- (Read 336 times) previous topic - next topic

jairbenavides

Apr 20, 2018, 06:00 am Last Edit: Apr 20, 2018, 06:05 am by jairbenavides
Leer primero ====>  CONVERSION DE DATOS   <==== Leer primero


Cordial saludo a la comunidad.

Soy aficionado y me gustaría hacer un minusculo aporte a otros novatos que como yo nos hemos roto el craneo con algo que para expertos es sencillo pero que en internet no lo encuentra uno facilmente. Tiene que ver con el procesamiento de datos recibidos por puerto Serial.

En el hilo del inicio de este tópico se plantean dos dudas y nos vamos a concentrar en la segunda.

mi Proyecto:

Mi proyecto consta de la recepción de datos provenientes de una báscula (15kl capacidad max) electrónica conectada a una Arduino Leonardo por el puerto Serie. Hasta aquí los datos se leen correctamente. el problema explotaba cuando quería operar estos datos recibidos, es decir, sumarlos, multiplicarlos dividirlos etc.

EL PROBLEMA:

Los datos recibidos y almacenados en una variable 'inbyte' están en formato DEC, y yo los necesitaba en formato HEX, es decir, Si la bascula me marcaba un peso de '11' la arduino me leía '17' por que '17' = (11 en HEX), así que si lo quería multiplicar  inbyte*10=170 y no 110 como en realidad lo necesitaba, y si mostramos ese ese '170' en HEX por lo que quedamos lejos del dato real.

En mi busqueda por la web siempre, y siempre fue siempre, me sugerían usar este código:

Serial.print(inbyte, HEX);  ===> muestra '11'
Serial.print(inbyte)           ===> muestra '17'

Este método funciona sólo y sólo sí vas a simplemente mostrar los datos mas no para operarlos.

Ahora bien, para poder operar estos datos, es necesario seguir estos pasos.

1- Recibir los datos y convertirlos en String así:

      inbyte=String(Serial1.read(), HEX);   //Serial1 por que uso una Leonardo. 'inbyte' es variable String
         
            Esta instrucción convierte el '17' recibido en el '11' que es el dato real que necesitamos (HEX)

2- Convertir esta cadena a Entero mediante:

      dato=inbyte.toInt(); // la variable 'dato' es long.

Eureca, ahora ya puede tomarse la variable 'dato' y operarla y el resultado quedará así

     dato*10=110; //  para cuando 'dato=11' después de convertirlo en string desde 'inbyte' como dato de entrada ('17')


Bueno, espero haber logrado aportarle algo a quienes arrancan con este maravilloso mundo, no soy programador ni ingeniero electrónico, soy aficionado y esto es para quienes como yo buscaba una manera sencilla de solucionar este problema




PaulS

Quote
'inbyte' is variable String
That is an incredibly stupid name for a variable that is NOT a byte.
The art of getting good answers lies in asking good questions.

Go Up