Go Down

Topic: Dar un valor de dos o más dígitos en comunicación serial (Read 976 times) previous topic - next topic

xalex1200

Muy buenas, me sorprende no haber sido capaz de encontrar información para este problema ya que deduzco que debe ser una práctica bastante frecuente, pero como ya dije no he logrado sacar nada en claro tras mucho buscar por la web.
Supongamos que tengo una variable v a la que le quiero asignar un valor mediante Serial.read(). Si el valor está entre 0 y 9 es muy fácil: v = Serial.read()-48 (por el tema del ASCII). Pero si quiero asignarle por ejemplo el 43, llegaría primero un 4 y luego un 3 y no un valor 43. Para salir del paso, lo que he hecho ha sido leer dos veces asignando una variable por valor y luego descomponer el número, por ejemplo 23 = 2*10 + 3. Esta solución a pesar de ser una chapuza funciona muy bien para salir del paso con sencillez, pero cuando la dificultad y complejidad de los proyectos aumenta ligeramente ya comienza a dar muchos dolores de cabeza. Por eso me preguntaba si alguien tendría idea de cómo se hace realmente.
Un saludo y muchas gracias de antemano.

curro92

Hola,
sobre eso hay mucho escrito. Puedes enviar los valores en forma de cadena de texto, y luego convertirlo a int, float o lo que te convenga.
Por ejemplo, aquí
http://totaki.com/poesiabinaria/2011/08/recibiendo-cadenas-de-texto-completas-con-arduino-por-usb-i/
se explica cómo enviar cadenas char


giltesa

O puedes enviar los números, booleanos, caracteres, cadenas, etc. como datos byte a byte almacenándolos en estructuras struct y union.

http://giltesa.com/wp-content/uploads/2013/03/union.txt
http://giltesa.com/wp-content/uploads/2013/03/union-struct.txt

Saludos!
giltesa.com Mi blog personal sobre informática, electrónica, Arduino, bricolaje, etc.

noter

También puedes probar, en lugar de Serial.read(), Serial.parseInt() o Serial.parseFloat(). Estas funciones leen caracteres de Serial hasta componer un entero o flotante.
Por ejemplo, si enviamos por Serial "123.56,1230" y enter, y el siguiente código:

float a=parseFloat(); // a debería ser 123.56
int b=parseInt(); // i debería ser 1230

xalex1200

Muchas gracias por los aportes, es justo lo que buscaba, sobre todo lo último. No había leído nunca sobre la existencia de esas funciones pero si funcionan no os imagináis lo fácil que va a ser mi vida a partir de ahora, jajaja.
Un saludo y muchas gracias de nuevo :)

joselet





Hola, esto no lo he probado, pero me ha parecido bastante util para el tratamiento de cadenas. Simplemente poniéndole como caracter terminador el símbolo "/0" o "/n"

http://arduino.cc/en/Serial/ReadBytesUntil
-EOF-

Go Up