Programación General > Visual Basic 6.0 e inferiores

 Mscomm

<< < (3/3)

Nebire:

--- Cita de: "hugo1983" ---... talvez alguien me puede ayudar, hay alguna forma de identificar si el puerto serial esta recibiendo voltaje ...
--- Fin de la cita ---
Queda patente que no tienes ni idea del significado del término 'digital', para ti quizás signifique algo como: 'aparato o técnica que se puede o permitie utilizar con los dedos', si no, no se explica. Es lamentable que alguien que 'está terminando su proyecto de fin de carrera' no sepa la base de la carera que está  ¿ finalizando ?... en fin, a lo que vamos...

... no te compliques, hay métodos más sencillos que experimentar 'a las aguas bravas'...
Por qué no tomas un viejo ratón de esos de bola (que funciones), le abres las tripas, lo modificas 'ligeramente' (esto es elimina todo excepto, uno de los pulsadores 'click')... y lo 'recubres dentro de una cajita adaptado a tus necesidades, de modo que lo que antes era un burdo interruptos ahora sea un pulsador...

Esto te elimina complejidades de harware ( que te son necesarias eliminar, cuando no tienes ni pajolera idea)...

...y por tanto ya sólo te centras en leer el puerto serial... no necesitas drivers de ratón, el driver es tu programa de lectura del puerto serie sobre dicho ratón...

Si buscas en el foró de VB,  'puerto serie' te aparecerán bastantes temas hablando del mismo: pulsa aquí

... es más, en uno recuerdo haber ayudado a un usuario lo suficiente como para controlar gran parte de ese trabajo ...

p.da.: Recuerda que la tecnología digital funciona por 'pulsos', ciclos de reloj, por tanto no esperes tener un 1 o un 0 así en seco y seguido, usa un timer cuyo intervalo sea por ejemplo 20 (50 veces por segundo) para establecer si es un 0 o si es un 1. hahora si fijo, debes usar una función de llamémosle 'votación popular', esto sería algo como:


--- Código: Visual Basic --- ' a nivel de formulariodim Unos as bytedim Valor as boolean MSComm1.PortOpen = True 'MSComm1.Settings= ' establecemos las características que deseemos y qeu sean acorde a nuestro hardware ' otras acciones  '  en evento del timer... static tics as byte  if comevento= .... then  designado desde un evento:  mscomm1.CommEvent        unos=unos +1 end if  if tics=50 then     if cint(unos/2) >= 25 then           valor=true  ' o si usamos eventos: raiseevent ValorCambiado(True)      else          valor=false   ' o si usamos eventos: raiseevent ValorCambiado(false)     end if    tics=0    unos=0 else    tics= tics +1   end if  
aunque mejor usar el evento oncomm del control... necesitas haber establecido previamente de acuerdo a tus requisitos los settings: mscomm1.settings= .....


--- Código: Visual Basic --- 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   
...y para terminar ... también puedes optar por algo más en sintonía y simple con lo que quieres...:

Pones a la escucha el puerto, una vez abierto

--- Código: Visual Basic --- ' a nivel de formulariodim Salir as booleandim buffer as stringdim Valor as boolean ' en evento load'    busca un puerto serie libre,'    establece los settings'    abre el puerto, después de cargado pulsa en el botón de escuchar el puierto serie, añade un botón de parar... ' en enveto de un botón: 'escucharPuertoSerie' Do      DoEvents       Buffer =  MSComm1.Input      ' no colocar aquí doevents....      if buffer <> "" then         Valor=true            ' tus acciones                  buffer=""         Valor=false   ' esto podría no ser necesario, dependerá del modo en que se diseñe y utilice...      else           Valor=false            ' otras acciones       end ifLoop Until salir=true  salir se activa y desactiva con un botón o un checkbox...
La comparación de buffer determina que se está leyendo obviamente cuando hagas click se entenderá diferente que cuando no, por tanto una vez finalizado la lectura de buffer, hay que poner 'a cero'  por código no por evento pués no pulsación no genera evento...

ya tienes todo lo suficiente para avanzar y terminarlo... para la próxima di cosas más coherentes...

deaven:
Hola

Hugo, si todavía sigues utilizando el interruptor en lugar del ratón sugerido x Nebire, quizá tu problema se solucionaría poniéndole un capacitor (condensador), k vaya desde tierra a la salida del interruptor.

Para encontrar el valor del capacitor tendrías k encontrarlo un poco con la práctica. Desde unos cuantos picofaradios hasta unos cuantos microfaradios.

Alguna vez hice un decodificador de televisión análogico (cuando nadie lo hacía todavía) y necesitaba k para activarse, el usuario pusiera una determinada secuencia de teclas desde los botones de la TV. Y fue ahí donde se me presentaba este problema. Al analizar con el osciloscopio la salida del interruptor cuando se accionaba, esta salida tenía precisamente mucho ruido. Mi solución fue la k te comento.

Saludos

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa