Programación General > Visual Basic para principiantes

 Envio De Datos Basic

(1/2) > >>

estebanreinoso83:
Cree una aplicación en Basic en la cual se comunica con pic. La aplicación envia caracteres ASCII al pic y este responde con caracteres ASCII tambien. Mi problema se da cuando la aplicación le pide medir la temperatura de una habitación, pues el pic usa un ADC para la connversión de datos y debe enviar este dato a la aplicación, el problema es q nose como debe enviarlo si como ASCII o decimal o binario o hexadecimal o como, en todo caso serian 2 numeros los enviados, ademas cual seria la codificacion en basic para poder ver estos valores en la aplicacion?
Gracias por la ayuda, le necesito urgente

Nebire:
Bueno, en la documentación del aparatito debe indicar el formato .
si careces de la documentación puedes intentar lo siguiente:

crea unas  constantes como las siguientes:

--- Citar ---  const fASCII=0
  const  fHEX=1
  const  fBINARIO=2
  const  fBCD=3     ' octal
  const  fBCD-x3: 4
  const  fOTROS...= 5

public posibleFormato as integer ' acogerá una de las constantes...
public valor as string   ' el valor que se devuelva convertido a cadena

--- Fin de la cita ---
ahora el valor arrojado conviértelo a cada uno de los formatos y envíalo adonde esperas procesarlo... allí usando la misma conversión rellena una tabla, un listbox o lo que sea antecediendo a cada salida el tipo de dato que es, vamos que tendría una salida similar a:

--- Citar ---   ASCII:  256
   HEX: ff
   BINARIO: 100000000
   BCD: 0010 0101 0110
   BCD-x3: 0101 1000 1001
   OTROS..: ?????

--- Fin de la cita ---
´toma 30 ó 40 muestras por espacio de 30sg 1 minuto...
ahora sabiendo que la habitación (tomado aprox. con un termómetro 'normal' ve anotando los registros cada vez que se actualiza el listbox.... finaliza el programa. traduce los valores de la tabla a decimal, y compáralos con los que anotaste manualmente con el 'termómetro en mano',  pueden suceder algunas cosas... las anotaremos:

* las temperaturas de un formato concuerdan casi con lo anotado, perfecto, ya lo tienes...
* concuerdan más de un formato : depende de como hayas hecho la conversión esto no debería ocurrir, revisa el código.
* no coincide ninguno: trata de convertir ahora todos los datos arrojados en el listbox desde centígrados a grados Farenheit, kelvin, Reamur... en la documentación del aparato debería indicar en que tipo devuelve los grados, lo lógico es que pueda darlo al menos tanto en centígrados como en Faenheit. Usa wikipedia para consultar las equivalencias si no las conoces. Una vez convertido a un formato, vuelve a compararlo con tus anotaciones...
* ha fallado todo lo anterior: el formato devuelto sin duda lleva un formato especfico y más complejo´, sin la documentación pertienente, sólo a base de intentos te va a ser difícil resolverlo. Esto es pongamos que la temperatura no se da como un dato específico sino acompañado de hora e indicación de formato, por ejemplo:
001 : hora, minuto, segundo
...
...
101  segundo, minuto, hora
0: grados centígrados
1: grados farenheit
0011
0111  ' 37º  los grados..en BCD

en fin que puede tener varios campos y cada campo con su formato específico, necesitas la documentación...o de otro aparato similar, para ver por donde van los tiros e intentar cosas similares...

estebanreinoso83:
Hola amigo Nebire, gracias por interesarte en el tema y por tu ayuda, la verdad ya logre la conversion y tengo el dato en ASCII, el pic me envia dos numeros que envia primero el de decenas y luego el de centenas, con el hiperterminal conectado serialmente logro observar la temperatura correspondiente, pero yo necesito ver el dato en BASIC, tengo una aplicación para el resto de cosas y en ella uso un timer el cual cada milisegundo escanea el com serial y compara lo que le llega almacenandolo en una variable A, hasta ahi todo bien, ahora mi pregunta es como presentar el dato en pantalla, estaba usando un text para que el momento en que lleguen los datos presentarlos en el mismo pero no se si la programación estará bien, el asunto es que tipo debo declarar a la variable para que almacene los 2 numeros enviados y todo eso? El codigo iba mas o menos asi:

para la parte deseada de temperatura:

Private Sub Timer1_Timer()
A = MSComm1.Input
If Len(A) > 3 Then
End If
If A = "f" Then 'La f es solo como comprobacion para saber que es la temperatura
lblResul.Visible = True
cmdAcep.Visible = True
cmdMenu.Visible = True
cmdSal.Visible = True
X = MSComm1.Input   ' asigno los dos numeros que me llegan a la variable
TextResult.Visible = True
TextResult.Text = X  'Supuestamente aqui enseño la temp. pero no se si esta bien
End If
End Sub


Por favor ayúdame en esta parte que ya ees lo ultimo que tengo que hacer para terminar mi proyecto.
Gracias de antemano

PD: djunto como texto la programación completa del formulario

Nebire:
En principio un textbox irá bien... pero ponle el 'background' de color negro y la fuente en negrita y de color blanco a un tamaño generoso (por lo menos 14-18). Se supone que es el dato relevante dentro del formulario, entonces dale el realce que precisa... debe destacar del resto, incluso  alignement=center y borderstyle=0

La variable si no la declaras es un variant, por defecto, es decir es a la vez un string, un integer, un long,etc.... por lo que el tipo de dato no debería preocuparte.

Luego creo que deberías cambiar el intérvalo del timer. Ignoro cual es la idea final. pero imagina un datro que cambia 1000 veces por sg. ...  alguien será capaz de leerlo ????... sólo si el valor no cambai a esa velocidad, yo te recomendaría por tanto que colocaras algún tipo de 'scroll' para poder modificar el intérvalo, entre ese valor de 1 y 1000 (salvo que deba transmitir el dato para otro objeto un valor de 1sg es más que sufiiente,  y un label que refleje el valor actual. Sin embargo yo te aconsejo modificarlo para usar el evento oncomm si el pic envía info directamente o el 'sondeo' si debes solicitarlo tú directamente... el método conocido como sondeo suele usarse en la forma:


--- Código: Text --- ' le envías los datos MSComm1.Output = "lo que sea que envías '   ' esperamos respuesta con los datos del puerto serie.   Do      DoEvents       miBuffer$ = miBuffer$ & MSComm1.Input   Loop Until InStr(miBuffer$, "lo que espero recibir") ' ó until len(miBuffer$)=2    ' ahora validas los datos   
El otro método es usar el evento onComm del propio control:


--- Código: Text --- Private Sub MSComm1_OnComm()   ' te pongo las referencias de las constantes para que no tengas que conocerlas de memoria, las aquí usadas deberían ser por ejemplo las de error y las de 'onCom'...  para aprovechando el evento con select case...    Dim errorCom As ErrorConstants    Dim eventoCom As CommEventConstants    Dim tipoCom As InputModeConstants  ' modo binario ó modo texto    Dim controlCom As HandshakeConstants    Dim onCom As OnCommConstants  '     Select Case MSComm1.CommEvent      ' detectar errores          Case comEventTxFull   ' el buffer está lleno          Case comReadError   ' error al leer el puerto            ' ...            ' ...          Case comGetNotSupported             MsgBox "La propiedad es de sólo lectura..."          Case comPortNotOpen             MsgBox "El puerto no se ha podido abrir..."            ' ...      ' detectar evento esperado          Case comEvRing   ' el indicador de llamadas ha cambiado                    Case comPortOpen   ' el puerto está abierto              MsgBox "Se ha abierto el puerto exitosamente."                  End Select   

Creo que con esto y haciendo las pruebas que creas pertienente acabarás por darle el toque final....

estebanreinoso83:
Hola Nebire, muchas gracias por tu ayuda, me ha servido de mucho, la verdad acabo de terminar el proyecto y ya tengo el dato de temperatura en pantalla con solo dos timers que envian y reciben la ingo al musmo tiempo: cada 5 seg.
La verdad todo eso esta bien.
Ahora y como punto final quisiera que me ayudes con una duda que tengo hace rato.
Lo que pasa es que necesito que mi aplicación, al ingresar en ella, escanee todos los puertos seriales que puedo usar y crear una opcion para yo escoger que puerto voy a usar para, finalmente, establecer el puerto escogido como predeterminado para el resto de la comunicación.
Eso sería lo único que me falta en si.
Gracias por tu ayuda y disculpa tantas molestias pero soy principiante en esto de BASIC.
Esteban

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa