Pasar decimal a binario

Iniciado por Cuasar, 6 Febrero 2011, 15:12 PM

0 Miembros y 2 Visitantes están viendo este tema.

Cuasar

Hola gente. estoy armando una aplicacion con la que controlo el puerto paralelo para prender unas luces.

por ahora va todo bien tengo 8 botones con los cuales manejo los 8 pines del puerto.

y les cambio el color dependiendo de si la luz esta prendida o apagada.

pero cuando cierro el programa y vuelvo a abrirlo me aparecen (en la aplicacion) todas apagadas otra ves, por mas que est no sea asi ya que las luces estan prondidas.

me gustaria poder leyendo el estado del puerto el decimal pasarlo a binario y poder asignarle los valores de 0 o 1 a 8 variables para poder detectar si esa luz esta prendida o apagada y que el programa refleje el estado real de puerto al iniciarlo.

podran ayudarme?.

se me ocurre que tambien podria guardar el estado del puerto en un txt para despues leerlo pero no se como hacerlo.

si a alguno le interesa la aplicacion puedo poner aca el codigo fuente.

gracias.


BlackZeroX

#2
.
Ojla compartas ese codigo algun dia.

Operaciones aritmeticas con Hex, Oct, Binario y Decimal

Base Decimal a Base N

Dulces Lunas!¡.
The Dark Shadow is my passion.

Tokes

Hola:

Pues, suponiendo que:

- Tienes un vector de 8 shapes, llamados luces(0), luces(1), ..., luces(7).
- Ya has leído el puerto y el valor lo almacenaste en una variable de tipo entero (Integer) llamada ValorPuerto, podemos hacer:

Dim i As Integer, j As Integer
   j=1
   For i=0 to 7   'Recorrerá las 8 luces
      If ValorPuerto And j Then   'Si está en '1' el bit...
         luces(i).BackColor=vbYellow   'visualiza amarillo (encendido).
      Else   'De lo contrario...
         luces(i).BackColor=vbBlack   'visualiza negro (apagado).
      Endif
      j=j*2
   Next


Buen día.

Cuasar

BlackZeroX Te comparto lo que tengo armado hoy dia depues puedo actualizarlo.

primero descargate la inpout.dll si la buscas en google la encontras por todos lados.

despues en el proyecto pones un modulo y le copias este codigo.

Option Explicit
Public Declare Function Inp Lib "inpout32.dll" _
Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)



una ves echo esto desde un formulario le asignas los valores que quieras al puerto.
con esta instruccion

Out &H378, 0

El CERO es el valor que le asignas al puerto puede ser de 0 a 255.
por las dudas fijate en el administrador de dispositivos si la direccion del puerto esta correcta ya que dependiendo de la configuracion de tu pc podria ser otra.

la direccion del puerto es  &H378 y la de entrada es &H379 por lo general es asi pero confirmalo si queres leer el puerto pones algo como esto.

Text3.Text = Str(Inp(Val(&H379)))
Con ese codigo le asignas al text3 el valor actual del puerto.


despues tengo una interface de potencia con la cual controlo las luces que si quieren comparto el circuito.

Cuasar

Tokes
tu codigo me sirve pero jeje perdon por mi ignorancia pero en vb2010
no se como crear una matris de objetos en vb6 al copiar y pegar pregunta si queres armarla pero aca no y no tengo idea de como hacerlo.

mas alla de eso me gustaria asignar el valo a 8 variables y desde las variables trabajar.

gracias..

raul338

Cita de: scrngs en  7 Febrero 2011, 03:17 AM
tu codigo me sirve pero jeje perdon por mi ignorancia pero en vb2010
no se como crear una matris de objetos en vb6 al copiar y pegar pregunta si queres armarla pero aca no y no tengo idea de como hacerlo.
Entonces este tema va en .net

Para crear una matriz de controles en .net tienes que hacerlo por codigo o para simular solo en partes de eventos, haz que todos los eventos que quieras apunten al mismo procedimiento, e identificas al control transformando el sender en un control (Dim boton As Button = (Button)sender)

Cuasar

Gente logre resolver mi problema y me gustaria compartirlo ya que es posible que a alguno le venga bien.

estoy cargando los datos en cajas de texto para poder verlos pero la idea es usar los datos de las variables para trabajarlos no hace falta que los vea en pantalla.

les paso el codigo.

Con el modulo cargado y un formulario con 10 Texbox y 2 Button ponemos este codigo.

    Dim DatosLPT1(7) As VariantType                                                                             'Es el valor del puerto con el que calculo los pines activos
    Dim Datos As String                                                                                         'Es el resultado despues de cada calculo


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Datos = Str(Inp(Val(&H378)))                                                                            'El valor inicial del puerto
        TextBox9.Text = Datos
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Calculo el estado del pin 8
        If Datos >= 128 Then
            DatosLPT1(7) = 128
            Datos = (Datos - 128)
            TextBox8.Text = 128
            TextBox9.Text = Datos
        Else
            TextBox8.Text = ""
        End If
        'Calculo el estado del pin 7
        If Datos >= 64 Then
            DatosLPT1(6) = 64
            Datos = (Datos - 64)
            TextBox7.Text = 64
            TextBox9.Text = Datos
        Else
            TextBox7.Text = ""
        End If
        'Calculo el estado del pin 6
        If Datos >= 32 Then
            DatosLPT1(5) = 32
            Datos = Datos - 32
            TextBox6.Text = 32
            TextBox9.Text = Datos
        Else
            TextBox6.Text = ""
        End If
        'Calculo el estado del pin 5
        If Datos >= 16 Then
            DatosLPT1(4) = 16
            Datos = Datos - 16
            TextBox5.Text = 16
            TextBox9.Text = Datos
        Else
            TextBox5.Text = ""
        End If
        'Calculo el estado del pin 4
        If Datos >= 8 Then
            DatosLPT1(3) = 8
            Datos = Datos - 8
            TextBox4.Text = 8
            TextBox9.Text = Datos
        Else
            TextBox4.Text = ""
        End If
        'Calculo el estado del pin 3
        If Datos >= 4 Then
            DatosLPT1(2) = 4
            Datos = Datos - 4
            TextBox3.Text = 4
            TextBox9.Text = Datos
        Else
            TextBox3.Text = ""
        End If
        'Calculo el estado del pin 2
        If Datos >= 2 Then
            DatosLPT1(1) = 2
            Datos = Datos - 2
            TextBox2.Text = 2
            TextBox9.Text = Datos
        Else
            TextBox2.Text = ""
        End If
        'Calculo el estado del pin 1
        If Datos >= 1 Then
            DatosLPT1(0) = 1
            Datos = Datos - 1
            TextBox1.Text = 1
            TextBox9.Text = Datos
        Else
            TextBox1.Text = ""
        End If

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Out(&H378, (Val(TextBox10.Text))) 'Le doy un nuevo valor al puerto
        Datos = Str(Inp(Val(&H378)))      'Cargo el valor del puerto en la variable para poder calcularlo
        TextBox9.Text = Datos             'Le asigno el valor del puerto a un Text para poder verlo

    End Sub


Lo comente todo asi se entiende lo que intente hacer.
Seguramente a alguno que sepa mas que yo de esto se le ocurrira alguna forma de hacerlo en muchas menos lineas. si es asi agradeceria me lo comparta.

con esto logro identificar cual es el estado del puerto al momento de iniciar la aplicacion y asi poder mantenerlo despues de un cierre o salida.

Gracias a todos lo que me dieron una mano!!!
Salu2