Organizar información del puerto serie

#1
Buenos dias! Se que es una pregunta muy basica para algunos pero no soy un experto y ademas he buscado y creo que no con las palabras adequadas.

RESUMEN:
Organizar/filtrar datos del puerto serie en diferentes variables (sensores), para ser visualizados y graficados.



Alguna sugerencia? ayuda? enlace?

Muchas gracias!

Ampliación de información:

Estoy intentado hacer desde 0 con visual basic (usando Sharpdevelop), un programa que tenga 2 opciones:

-Visualizar numericamente.

-Visualizar graficamente.

Se trata de un arduino mandando información sobre varios sensores a traves del puerto serie. Este envia los datos de los sensores asi:

sensor1:433 sensor2:345 sensor3:534
sensor1:433 sensor2:345 sensor3:534
sensor1:433 sensor2:345 sensor3:534


Y aqui esta mi problema, no se como Organizar/filtrar estos datos para ir mostrandolos por pantalla en su correspondiente caja de texto.

Había pensado de meter caracteres especiales para que se detecte cuando empieza el valor del sensor y cuando acaba pero no se como.
Otra alternativa seria que no envie la información hasta que el PC la solicite, y por tanto el PC decida que sensores quiere leer...

Alguna sugerencia? ayuda? enlace?

Muchas gracias!
 
#2
Con (sensor1:433 sensor2:345 sensor3:534) puedes usar una función de separación {ver función Split para VB} para separar en subcadenas.

sensor1:433
sensor2:345

e igual con lo mismo, puedes separar el nombre del valor.
Sugiero que los bloques (sensor1:433) los separes con comas u otro signo. Igual, revisa la funsión.

Saludos
 
#3
Ok! muchas gracias!
Despues de mucho probar aqui tengo parte del codigo:


Código:
    [COLOR=#0000ff]Dim[/COLOR] text_in [COLOR=#0000ff]As[/COLOR] [COLOR=#6f002f]String[/COLOR]
    [COLOR=#0000ff]Dim[/COLOR] sensor0 [COLOR=#0000ff]As[/COLOR] [COLOR=#6f002f]String[/COLOR]
    [COLOR=#0000ff]Dim[/COLOR]    sensor1 [COLOR=#0000ff]As[/COLOR] [COLOR=#6f002f]String[/COLOR]
    [COLOR=#0000ff]Dim[/COLOR]    sensor2 [COLOR=#0000ff]As[/COLOR] [COLOR=#6f002f]String[/COLOR]
    [COLOR=#0000ff]Dim[/COLOR] line [COLOR=#0000ff]As[/COLOR] [COLOR=#6f002f]String[/COLOR]
    [COLOR=#0000ff]Dim[/COLOR]    a    [COLOR=#0000ff]As[/COLOR] [COLOR=#6f002f]String[/COLOR]()


[COLOR=#0000ff]Sub[/COLOR] Tmr_aTick(sender [COLOR=#0000ff]As[/COLOR] [COLOR=#6f002f]Object[/COLOR], e [COLOR=#0000ff]As[/COLOR] EventArgs)
            line=serialPort.ReadLine
            txt_multi.[COLOR=#0000ff]Text[/COLOR]= line & text_in
            text_in=txt_multi.[COLOR=#0000ff]Text[/COLOR]
                
        [COLOR=#008000]'Separate values[/COLOR]
        
        a=Split(line)
        sensor0=a(1)
        txt_A.[COLOR=#0000ff]Text[/COLOR]=sensor0
        
        
    [COLOR=#0000ff]End[/COLOR] [COLOR=#0000ff]Sub[/COLOR]
Pero me da un error
**********
Pantalla numerica
Indice fuera de los limites de la matriz
**********

Que puede ser?
Lo he analizado y el error lo crea:
Código:
sensor0=a(1)
Debo cambiar de variable?
 
#4
Hola.
1ro. Usas a=Split(line), por defecto va a separar cuando encuentre solo espacios (" ").

2do. Estas seguro que la cadena "sensor1:433 sensor2:345 sensor3:534" siempre se lee igual al mismo tiempo?.
Si la cadena está incompleta, Split va a devolver la misma cadena ya que no ha encontrado espácios (" ") para hacer la separación. Por lo tanto el array solo va a tener un valor en el vector o posición cero (0), por eso cuando apuntas a (1) da error al no existir.

En un post anterior te pasé un link donde explica como usar la función Split, tambien hay ejemplos.

Para tu caso, vas a necesitar hacer dos separaciones (siempre y cuando la cadena sea correcta), la primera separando por espácios para obtener "sensor1:433" y la segunda debes de indicar que el carácter de separación sea ":" para obtener "sensor1" y "433" separados... lo mismo para el resto.

Saludos.
 
#5
perdon! me falto citar que en el puerto serie tengo estos datos separados por espacios:
s0 123 s1 343 s2 548
s0 123 s1 343 s2 548
s0 123 s1 343 s2 548
...
Y esta es la parte de arduino que lanza estos datos al puerto serie.
Código:
  Serial.print("s0 "); 
  Serial.print(s0);      
  Serial.print(" ");      
  Serial.print("s1 ");
  Serial.print(s1);      
  Serial.print(" ");
  Serial.print("s2 ");  
  Serial.print(s2);      
  Serial.println(" \n");
Es decir que lo separo por espacios.
 
#6
SOLUCIONADO!

El problema estaba en el arduino, ya que enviaba un print con final de linea y ademas un "\n".

Por lo que imagino que se enviaba una linea vacia que al aplicar el split daba lugar a una matriz vacia de una sola dimension a(0) y al estar accediendo al a(1) me daba este error.

Espero que ya que me ha ayudado a mi en un futura ayude a otros como yo!

Saludos y muhas gracias a todos!
 

Temas similares

Arriba