Autor Tema: VB6 salida puerto serie  (Leído 307 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dgnr07

  • PIC10
  • *
  • Mensajes: 5
VB6 salida puerto serie
« en: 03 de Julio de 2021, 16:33:23 »
hola, estoy haciendo un programa para encender leds en un pic que recibe el dato desde el puerto serie de la PC.
los leds que quiero encender los elijo mediante checkbox, pero no se me ocurre como hacer para que a medida que seleccione los distintos checks cambie el valor de la salida...



o sea, si checkeo todas, la salida deberia ser 11111111
si checkeo 1 por medio deberia tener una salida 10101010
si checkeo "ninguno" deberia tener 00000000

habia visto algo de leer check x check y hacer una logica AND pero no recuerdo como es el proceso

luego teniendo ese valor, lo envio al pic y puedo mover ese dato directamente al puerto de salida.

« Última modificación: 12 de Julio de 2021, 05:00:10 por xocas, Razón: Editado para hacer visible la imagen »

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 521
Re:VB6 salida puerto serie
« Respuesta #1 en: 03 de Julio de 2021, 22:34:27 »
hola, estoy haciendo un programa para encender leds en un pic que recibe el dato desde el puerto serie de la PC.
los leds que quiero encender los elijo mediante checkbox, pero no se me ocurre como hacer para que a medida que seleccione los distintos checks cambie el valor de la salida...

Podés hacer un array de checkboxs e ir activando con un select case
Código: [Seleccionar]
Private Sub Check1_Click(Index As Integer)
Dim i%

    Select Case Index
        Case 0:     LedMask = LedMask Xor 1
        Case 1:     LedMask = LedMask Xor 2
        Case 2:     LedMask = LedMask Xor 4
        Case 3:     LedMask = LedMask Xor 8
        Case 4:     LedMask = LedMask Xor 16
        Case 5:     LedMask = LedMask Xor 32
        Case 6:     LedMask = LedMask Xor 64
        Case 7:     LedMask = LedMask Xor 128
    End Select
.............................

 '  Y enviás LedMask al PIC

.............................



Citar
o sea, si checkeo todas, la salida deberia ser 11111111
si checkeo 1 por medio deberia tener una salida 10101010
si checkeo "ninguno" deberia tener 00000000

En lugar de checkboxs con TODOS y NINGUNO  le pondría un array de dos botones

Código: [Seleccionar]
Private Sub Command1_Click(Index As Integer)
Dim i%

    If Index = 0 Then
        For i = 0 To 7
            Check1(i).Value = 1
        Next
    Else
        For i = 0 To 7
            Check1(i).Value = 0
        Next
    End If
.....................

 '  Y enviás LedMask al PIC

.............................


Cada vez que se ejecuta Check1(i).Value=  te llama a la otra rutina, por lo que LedMask se actualiza automáticamente.

Lo que vas a tener que agregar es una variable para que mientras hace esto Check1_Click() no transmita nada porque si no vas a mandar 9 máscaras en total.




Te hago yo una consulta:  ¿El VB6 que estás usando con qué sistema operativo lo corrés?
Yo lo he podido hacer marchar solamente en una máquina virtual con XP.

Desconectado dgnr07

  • PIC10
  • *
  • Mensajes: 5
Re:VB6 salida puerto serie
« Respuesta #2 en: 03 de Julio de 2021, 23:19:25 »
despues de casi 11 horas de estar pensando, pude lograrlo... lo que hice fue asignar a cada checkbox una variable (bit7, bit6, bit5, bit4, bit3, bit2, bit1 y bit0) cada una de estas variables toman un valor "1" o "0" dependiendo si el check esta habilitado o no.
luego el valor a sacar por la salida del rs232 se forma sumando todas las variables multiplicadas por su potencia.
Label3.Caption = Val(bit7*10^7)+Val(bit6*10^6)+Val(bit5*10^5)+Val(bit4*10^4)+Val(bit3*10^3)+Val(bit2*10^2)+Val(bit1*10^1)+Val(bit0*10^0)
este numero de 8 bits luego lo paso al out del mscomm  :-/



edito: ahora tengo el problema que el numero me lo toma como un decimal, tengo que convertirlo en hexa para enviarlo al pic
« Última modificación: 04 de Julio de 2021, 11:39:24 por dgnr07 »

Desconectado scrwld

  • PIC10
  • *
  • Mensajes: 28
Re:VB6 salida puerto serie
« Respuesta #3 en: 11 de Julio de 2021, 22:47:42 »
hola dgnro07, veo que lograstes resolver tu problema, de todas maneras te comparto parte de unas rutiinas que espero te puedan servir:

estas rutinas son parte de una que uso para guardar,leer el valor de un grupo de checkbox(40)

en Aa el valor decimal de los checkbox, valor que envio via modbus a una tarjeta de control
Dim mask%
        Aa = 0
            For i = 0 To 7
                Aa = Aa + Check1(i) * 2 ^ i
            Next

**********************************************************************************************
   'BORRO CONTENIDO CHECKBOX K es el checkbox
                For i = 0 To 7
                    Check1(K + i).value = False
                Next
'***************RELLENO CHECKBOX  ******************
Aa es el valor recibido por el puerto serial

            For i = 0 To 7
                mask% = 2 ^ i
                Check1(K + i).value = IIf((Aa And mask%) > 0, 1, 0) ' http://support.microsoft.com/kb/113476/es
            Next
*************************************************************************************

y por que necesitas valores hex.

saludos
luis lopez