Pages: [1]   Go Down
Author Topic: Dar un valor de dos o más dígitos en comunicación serial  (Read 722 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 711
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Huesca, Spain
Offline Offline
Full Member
***
Karma: 3
Posts: 100
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged


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

Palencia, Spain
Offline Offline
Sr. Member
****
Karma: 19
Posts: 385
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 20
Esperar que la vida te trate bien porque seas buena persona es como esperar que un toro no te ataque porque seas vegetariano.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset



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
Logged

-EOF-

Pages: [1]   Go Up
Jump to: