TODOPIC
Lenguajes de programación para PC => Visual Basic => Mensaje iniciado por: dgnr07 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...
(https://i.ibb.co/jVQvPLc/Sin-t-tulo.png)
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.
-
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
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
.............................
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
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.
-
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 :-/
(https://ibb.co/Pttxf4B)
edito: ahora tengo el problema que el numero me lo toma como un decimal, tengo que convertirlo en hexa para enviarlo al pic
-
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