# Diseño interfaz con VB 6



## Meta (Mar 25, 2015)

Hola:

Estoy haciendo una Interfaz con VB 6 para Windwos 7 de 64 bits. 


Como puedes o pueden ver, se inicia el puerto serie nada más ejecutar la aplicación o interfaz. Hay gente que lo quiere activar y desactivar el puerto con un botón.

¿Qué prefiere la mayoría de ustedes?

Por ahora, estoy terminando lo de recibir mensajes de texto por parte de los PIC y Arduino.

Saludos.


----------



## D@rkbytes (Mar 25, 2015)

Meta dijo:


> Como puedes o pueden ver, se inicia el puerto serie nada más ejecutar la aplicación o interfaz.
> Hay gente que lo quiere activar y desactivar el puerto con un botón.
> 
> ¿Qué prefiere la mayoría de ustedes?


Existen muchas aplicaciones que inician abriendo el puerto serie, pero se debe tener en cuenta algo muy importante.
No todas las computadoras actuales tienen puerto serial, y si lo tienen, puede ocurrir que se encuentre ocupado.
Por lo tanto es conveniente que la aplicación tenga una rutina de comprobación al iniciar.
Si no existen puertos se debe dar un aviso al usuario, y si existen puertos,  se deben enumerar y descartar los que se encuentren ocupados.

Cuando no existen puertos serie y la aplicación intenta abrir alguno, se producirá un error que si no es depurado provocará el cierre de la misma. (En VB6)

Los puertos disponibles son los que se deben mostrar, y por ese motivo es más conveniente que el usuario sea quien tome la decisión de seleccionar el puerto.

Otro motivo de no iniciar el puerto serie cuando se ejecute la aplicación, es la selección de parámetros COM.
Si éstos ya han sido preestablecidos no hay problema, pero siempre puede haber cambios por mejoras y se tendría que reprogramar la aplicación.

Así que la decisión de abrir un puerto al iniciar la aplicación, depende de los criterios del programador.


----------



## J2C (Mar 25, 2015)

.



 Opinión personal después de un año de haber actualizado (Marzo 2014) mi PC del Taller.


 Cuesta un triunfo (muchos $$$) conseguir una PC con puertos COM !!!. Como que hay que empezar a realizar las cosas pensando en USB (aclare mi opinión personal).


 Tanto es así que estoy tratando de conseguir una motherboard aunque sea algo antigua (Celeron 2.66) que posea puertos COM y ponerle un XP SP3.



 Saludos, JuanKa.-


----------



## analogico (Mar 25, 2015)

J2C dijo:


> .
> 
> 
> 
> ...



 pero si hay tarjetas pci y pci express  seriales  solo necesitas una placa madre con los slot

por que incluso ya estan saliendo sin slot

y para el mensaje original del post
 configurable con un archivo de configuracion


en caso de que no exista el archivo de configuracion
que la aplicacion lo cree con los parametros basicos o por defecto


----------



## pandacba (Mar 25, 2015)

Hay muchas placas no tan viejas que si bien no trae el conector en la placa estan los pines para poner el conector con cable, y como conectaror existen placas PCI, para agregarlo y funcionan muy bien


----------



## Meta (Mar 26, 2015)

Hola:

Hay tarjetas PCI de puerto serie y paralelo, precisamente no son caras.






En caso de que no tenga estar tarjetas ni en la propia placa base el puerto serie. Arduino crea uno virtual, he puesto Arduino UNO y Arduino Micro. Lo detecta como puerto serie.

Las ideas que me dan está bien presentada. Lo intentaré hacer como dicen. En Visual C#, más adelante lo haré con VB .net 

Ejemplo: Detecta el puerto serie y lo añade al componente comboBox de Visual C# automáticamente.

```
protected override void WndProc(ref Message m)         
     {             
              if (m.Msg == 0x219)             
     {                
           combopuertos.DataSource = SerialPort.GetPortNames();            
     }     
            base.WndProc(ref m);        
      } // Detecta si hay cambios en el usb y si los hay los refleja
```
Gracias por las informaciones.

Pondré ejemplos por aquí cuando termine y me dirán sugerencias para hacerlo lo mejor posible.


----------



## Meta (Mar 26, 2015)

Hola:

He encontrado 6 cmd.exe en Windows 7 de 64 bits.






Ver zoom.

Lo ejecuto como administrador.






Ejecuto comando como indica abajo.






Me sale este mensaje.






Contento y emocionado, intento agregar el componente.






Le doy aplicar o aceptar y me aparece este mensaje.






Me pregunto. ¿Qué es lo que falla realmente?

Saludos.


----------



## D@rkbytes (Mar 26, 2015)

Eso sucede cuando el componente ActiveX no es compatible con el sistema operativo.

El llamado a la función "DllRegisterServer" hace el correspondiente registro, pero por incompatibilidades con el sistema, el IDE no puede tener acceso al mismo.

Eso me ha pasado al actualizar la versión de Windows.
Pudiera no ser tu caso, pero te recomiendo que actualices el ActiveX por uno que sea compatible con tu sistema.


----------



## Meta (Mar 26, 2015)

Por lo que veo, mejor me conformo con un Text y pongo en modo Multiline. Llevo tiempo con la tontería esta.


----------



## D@rkbytes (Mar 26, 2015)

Existen otros componentes alternativos al control ActiveX RichEdit32.dll.
Necesitas buscar por la red. Una buena página de ejemplos y componentes gratuitos, es vbAccelerator
Ahí puedes encontrar el componente (VBRichEdit.ctl)
Ese componente tal vez funcione en tu sistema por ser creado en el mismo entorno.


----------



## Fogonazo (Mar 26, 2015)

*No abras un tema por cada duda que te aparece sobre lo mismo*


----------



## analogico (Mar 26, 2015)

Meta dijo:


> Las ideas que me dan está bien presentada. Lo intentaré hacer como dicen. En Visual C#, más adelante lo haré con VB .net


c# y visualnet es practicamnete lo mismo
no existen mayores diferencias que el EGO
del programador

para vb.net el codigo seria


```
Me.comboBox1.DataSource=Me.serialPort1.GetPortNames
```


y del error en vb basic 6 quizas debas ejecutarlo como administrador tambien


----------



## Meta (Mar 26, 2015)

Lo he hecho como administrador y nada de nada. Qui´zas tenga que poner el objeto en el Widnows/System32 y no donde está para 64 bits.


----------



## analogico (Mar 26, 2015)

Meta dijo:


> Lo he hecho como administrador y nada de nada. Qui´zas tenga que poner el objeto en el Widnows/System32 y no donde está para 64 bits.



  el system32 es de 64 bit 
y el siswow64 es de 32 bit

http://www.samlogic.net/articles-spanish/explicacion-carpetas-archivos-de-programa-x86-syswow64.htm


----------



## Meta (Mar 27, 2015)

analogico dijo:


> c# y visualnet es practicamnete lo mismo
> no existen mayores diferencias que el EGO
> del programador
> 
> ...



Alguasn cosas son lo mismo otras no tanto. No se el motivo que Microsoft quiere que pasemos a C# y nos olvidemos de VB. En clases nos enseñaron VB .net, (no me gusta mucho este lenguaje) y que el mercado, al menos en España, estamos con C#, esos i, por encima el rey del mundo al menos en el empresarial es Java. Aunque muchos crean que no.








analogico dijo:


> el system32 es de 64 bit
> y el siswow64 es de 32 bit
> 
> http://www.samlogic.net/articles-spanish/explicacion-carpetas-archivos-de-programa-x86-syswow64.htm



Me acabas de dejar las cosas muy claras, cosa que no sabía. Por lo que veo, aunque haga de todo, usaré solo el Text y en modo Multilinea. Ahora me toca aprender como se hace entradas de datos desde el puerto serie.

Saludos.


----------



## Meta (Mar 28, 2015)

Hola:

Siguiendo con el tema. Haber si diseño un poco mejor.



Consiste en tener un botón CONECTAR puerto o abrirlo. Si lo abres el puerto se abre y en el mismo botón dirá DESCONECTAR. Su código es este.


```
Private Sub Command_CONECTAR_Click()
    If Not MSComm1.PortOpen Then
       MSComm1.PortOpen = True
       Command_CONECTAR.Caption = "DESCONECTAR"
    Else
       MSComm1.PortOpen = False
       Command_CONECTAR.Caption = "CONECTAR"
    End If
End Sub
```
Aquí abajo tengo un código completo del programa pero que tiene muchos errores. El combobox detecta cuando hay puerto serie sea físico y virtual cuando ejecuta este programa. Así que debería funcionar eligiendo cualquier pueto que elijas del comobox.


```
Private Sub Command_CONECTAR_Click()
    If Not MSComm1.PortOpen Then
       MSComm1.PortOpen = True
       Command_CONECTAR.Caption = "DESCONECTAR"
    Else
       MSComm1.PortOpen = False
       Command_CONECTAR.Caption = "CONECTAR"
    End If
End Sub

    Private Sub Command_Led_8_OFF_Click()
    MSComm1.Output = "Led_8_OFF"
    End Sub
     
    Private Sub Command_Led_8_ON_Click()
    MSComm1.Output = "Led_8_ON"
    End Sub
     
    Private Sub Form_Load()
    MSComm1.PortOpen = True ' Habilitar el puerto serie.
       Form1.ComboBoxCOM.Clear ' Limpiar comboBox.
          MSComm1.CommPort = ComboBoxCOM.ListIndex = 0
    Timer1.Interval = 1       ' Correr el timer a 1 mls.
       Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity") 'Win32_SerialPort")
       For Each wmiobject In WMIObjectSet
           If InStr(wmiobject.Name, "COM") Then   '
             Form1.ComboBoxCOM.AddItem wmiobject.Name
           End If
            Next
       Set WMIObjectSet = Nothing
    End Sub
```

Cuando logre este objetivo, continuo la parte de recibir datos por el puerto serie.

Saludos.

PD: _La verdad que no se parece nada al VB .net._


----------



## Scooter (Mar 28, 2015)

Eso, a ver................


----------



## Meta (Mar 28, 2015)

Me señala siempre esta parte.

```
MSComm1.CommPort = ComboBoxCOM.ListIndex = 0
```
Error que no puede abrir el puerto.


----------



## D@rkbytes (Mar 28, 2015)

Así no está bien. *Combo1.ListIndex = 0*, tiene el valor 0 y el puerto 0 no existe.
Podría ser: *MSComm1.ComPort = ComboBoxCOM.ListIndex + 1*

Acá ya está una interfaz completa y funcionando donde puedes ver cómo se hace.
*Interfaz RS232 PIC PC (Proyecto Completo VB6)*

Te recomiendo que mires la versión 2 que tiene algunas mejoras.

Ahora uso otro método para cargar los puertos disponibles al ComboBox:


```
' Buscar del COM1 al COM16 (El MSCOMM de VB6 sólo admite hasta 16 puertos)
    cmbPort.Clear
    ' Método sin API
    ' Este método reconoce todos los virtuales, pero si hay más de 16 virtuales
    ' el método falla agregando puertos falsos si el For es mayor a 16
    For i = 1 To 16
        frmMain.RS232.CommPort = i
        On Error Resume Next
        frmMain.RS232.PortOpen = True
        If Err = 0 Then
            frmMain.RS232.PortOpen = False
            cmbPort.AddItem "COM" & i
        End If
    Next i

    cmbPort.ListIndex = 0 ' Aquí yo establezco el indice desde un valor del registro.
```
Y para establecer el número del puerto al MSCOMM, lo hago de ésta forma:

```
' Obtener sólo el número del puerto seleccionado
    ComPort = CStr(Mid(cmbPort.Text, 4)) ' Al hacer ésto, se elimina "COM"
    MSCOMM1.CommPort = ComPort
```


----------



## analogico (Mar 28, 2015)

Meta dijo:


> Hola:
> 
> 
> Saludos.
> ...



se parece y mucho solo que el net es  con objetos 
y lo mejor que con el net es hasta mas facil 

no  tienen sentido  hacer esto en vb6 a menos que lo vayas a usar en un pc antiguo


----------



## Meta (Mar 29, 2015)

D@rkbytes dijo:


> Así no está bien. *Combo1.ListIndex = 0*, tiene el valor 0 y el puerto 0 no existe.
> Podría ser: *MSComm1.ComPort = ComboBoxCOM.ListIndex + 1*
> 
> Acá ya está una interfaz completa y funcionando donde puedes ver cómo se hace.
> ...



Voy hacer pruebas y comento.

Por cierto, la versión 2 de tu interfaz es la leche. Buen trabajo.



analogico dijo:


> se parece y mucho solo que el net es  con objetos
> y lo mejor que con el net es hasta mas facil
> 
> *no  tienen sentido  hacer esto en vb6 a menos que lo vayas a usar en un pc antiguo*



Exacto, es para usar en un PC antiguo. En el 2008, cuando hice tutoriales de Visual C# y sobre todo VB .net 2008, muchos usuarios de la época me pedían que lo hiciera con VB 6 y sin rechistar, precisamente por este foro y otros muchos. No lo he llegado hacer porque lo vi muy obsoleto y estaba el VB .net que es lo que se usa ahora.

Aunque no lo creas, hoy en día siguen con el santo VB 6 hasta en Sur y Centro de América, aunque soy de España, me lo han pedido en plan bestia. Así que haré con muchos lenguajes diferentes un tutorial que soporte todos los lenguajes de Visual Studio y Java. El que quiera una demo en PDF lo adjunto y así de paso me orientan como va y como quieren que sea. Más adelante me meteré con Raspberry 2 que lo he comprado y probado, una pasada. Ya sabes _analogico_ .

Siguiendo con el tema principal.

¿Mi código qué tiene de malo con el tuyo en esta parte? Lo bueno que este te dice hasta el nombre de todo los puerto virtuales que tengas en uso.


```
Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity") 'Win32_SerialPort")
       For Each wmiobject In WMIObjectSet
           If InStr(wmiobject.Name, "COM") Then   '
             Form1.ComboBoxCOM.AddItem wmiobject.Name
           End If
            Next
       Set WMIObjectSet = Nothing
```
Se ven sus nombres de los puertos virtuales.

en el ComoBox.

Lo veo más chulo. Si al final no me funciona como quiero, lo hago de tu forma de siempre.

Saludos.


----------



## D@rkbytes (Mar 29, 2015)

Meta dijo:


> Siguiendo con el tema principal.
> 
> ¿Mi código qué tiene de malo con el tuyo en esta parte? Lo bueno que este te dice hasta el nombre de todo los puerto virtuales que tengas en uso.
> 
> Lo veo más chulo. Si al final no me funciona como quiero, lo hago de tu forma de siempre.


De esa forma me parece muy bien.
Hace tiempo lo implementé de esa manera, pero me di cuenta que no se podía obtener el número de puerto seleccionado por indexado.
Como te darás cuenta, al obtener el nombre se obtiene una cadena que dentro lleva el número de puerto, pero no está indexada.

Y cuando se usan puertos virtuales se obtienen también  los puertos pares. 

Esto ofrece la ventaja de identificación, pero al no estar indexado resulta algo complejo obtener el número del puerto por medio de un ComboBox.

Sin embargo, con algunas separaciones de la cadena utilizando instrucciones comunes de VB, se puede separar y obtener el número correcto sin complicaciones.


----------



## Meta (Mar 29, 2015)

Hola:

Ok, probaré el tuyo que está mejor y no me complico la vida. Voy hacer pruebas y luego comento.

Saludos.

PD: _Estoy hasta las narices del VB 6.  Como me cuesta esto por Dios. JAja ajaajjja, me da por reír por no llorar. _


----------



## Meta (Abr 1, 2015)

Hola:

Hice este, me funciona, pero al cambiar el puerto en el comoBox, siempre funciona como el COM4 y no se peude cambiar nada.


```
Option Explicit
     
    Dim vPuertos() As String 'Para almacenar el verdadero nombre de los puertos, sin la descripocion.
     
    Private Sub Form_Load()
        Dim i As Integer
        For i = 1 To 10
            ComboBoxCOM.AddItem "Arduino (COM" & i & ")" ' cargo el combo con descripcion y el numero del puerto
           
            ReDim Preserve vPuertos(ComboBoxCOM.ListCount - 1)
            vPuertos(ComboBoxCOM.ListCount - 1) = "COM" & i
        Next
    End Sub
     
    Private Sub ComboBoxCOM_Click()
        MsgBox vPuertos(ComboBoxCOM.ListIndex) '  te muestra solo el nombre real del puerto, sin la descripcion
    End Sub


' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm1.PortOpen Then
       MSComm1.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR"
    Else
       MSComm1.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR"
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
    MSComm1.Output = "Led_8_OFF" ' Envía este cadena de carácter por el puerto serie.
End Sub
     
Private Sub Command_Led_8_ON_Click()
    MSComm1.Output = "Led_8_ON" ' Envía este cadena de carácter por el puerto serie.
End Sub
```
Saludos.


----------



## analogico (Abr 1, 2015)

Demasiado complejo para algo tan simple, y nunca asignas el puerto seleccionado en el combobox.


----------



## Meta (Abr 2, 2015)

De eso se trata, conseguir algo simple y no dejarlo complejo como lo tengo ahora.

Por lo que se ve, parece mejor no usar un comobox, sino internamente dejarlo ya seleccionado. como es para un tutorial, no pasa nada.

Da igual el puerto que elija en el ComboBox, siempre me sale el 4, precisamente el que tengo seleecionado en las propiedades.








```
Private Sub Form_Load()
    With Me.ComboBoxCOM
        Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
        For Each wmiobject In WMIObjectSet
            If InStr(wmiobject.Name, "COM") Then
                ComboBoxCOM.AddItem wmiobject.Name
                
                Dim nCom%   ' Buscamos el número del puerto:
                nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
                nCom = Val(Mid(wmiobject.Name, nCom + 3))
    
                ComboBoxCOM.ItemData(.NewIndex) = nCom
            End If
        Next
        Set WMIObjectSet = Nothing
                
        If ComboBoxCOM.ListCount = 0 Then
            MsgBox "No se encontraron puertos COM."
            Exit Sub
        End If

        ' Para seleccionar el primer puerto encontrado:
        .ListIndex = 0
    End With
End Sub


' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm1.PortOpen Then
       MSComm1.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR"
    Else
       MSComm1.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR"
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
    MSComm1.Output = "Led_8_OFF" ' Envía este cadena de carácter por el puerto serie.
End Sub
     
Private Sub Command_Led_8_ON_Click()
    MSComm1.Output = "Led_8_ON" ' Envía este cadena de carácter por el puerto serie.
End Sub
```

Al final, lo mejor no usar comboBox, porque no me entero y estoy atrasando el tutorial, ejejj e jeje jej. Cuando acabe esto, me meto con los 74HC595 junto con el 74HC165 bien explicado a fondo. Eso si, antes que nada, también con la recepción de mensajes del puerto en el text.

Saludos.

Saludos.


----------



## D@rkbytes (Abr 2, 2015)

Meta dijo:


> Por lo que se ve, parece mejor no usar un comobox, sino internamente dejarlo ya seleccionado. *Como es para un tutorial, no pasa nada.*
> 
> Da igual el puerto que elija en el ComboBox, siempre me sale el 4, precisamente el que tengo seleccionado en las propiedades.


Si el ejemplo es para un tutorial es cuando más deberías esforzarte para quede prolijo.
La selección y verificación de actividad de los puertos es importante por lo que ya mencioné.
Si lo haces de la forma que pensaste inicialmente, todos los que lean tu tutorial creerán que así se debe hacer.

Y es cierto lo que menciona _*analogico*_. Estás creando un código muy complicado para algo que es verdaderamente muy sencillo.
Si el MSCOMM siempre abre el puerto 4, es porque no le vuelves a reasignar otro puerto.


----------



## Meta (Abr 3, 2015)

Cierto, pero no estoy al día con VB 6, si no con C#, jejejejejjeje.

Saludos.


----------



## dinoelectro (Abr 3, 2015)

Hola Meta

Visual Basic 6 y los puertos COM estan obsoletos; el lenguaje no funciona correctamente en sistemas operativos de 64 bits y los puertos COM son muy dificiles encontrar en computadores modernos. 

Tu me diras que se puede emular la comunicacion atraves de USB creando un puerto virtual; Aun asi no es lo mas recomendable ya que no aprovechas al cien por cien las bondades que te ofrece USB. Mi recomendacion es que te actualices a VB.net y utilices la comunicacion HID o el metodo de transferencia masiva "BulK-transfer"

HID no require de driver para que el sistema operativo reconozca a tu hardware; la mayoria de dispositivos como mouse, teclados, microfonos, parlantes, flash memory, discos duros, telefonos celulares, joystics etc. utilizan este metodo de transferencia de datos; Ademas la comunicacion es muchos mas veloz y segura comparada con los puertos COM.

Con el metodo de transferencia masiva "Bulk-Transfer" alcanzaras la sorprendente velocidad de 12Mb/s 

Saludos .


----------



## Meta (Abr 3, 2015)

Hola @dinoelectro:

Lo que dices es cierto, el peurto virtual lo crea los propios driver que se instalan cuanto usas Arduino y funciona de maravilla. Lo del VB 6 lo he ignorado desde el 2008, aconsejaba .net como me has aconsejado.

Lo quiero solo porque me lo han pedido que lo incluya en el tutorial que estoy haciendo en pdf, se incluye VB6 y hay gente que lo usará para PC muy viejos con Windows XP.

Dejo este enlace temporal para que se hagan una idea. El VB .net lo tengo hecho desde el 2008 lo que estoy actualizando orientado a Arduino, en este caso.

Tutorial.
https://www.dropbox.com/s/ha07f67zieee7v6/Interfaz control reles Arduino.pdf?dl=0

Saludos.


----------



## Meta (Abr 4, 2015)

Hola de nuevo:

¡¡¡Por fiiiiiiiiiiiiiiiiiiin me funciona!!!

Casi me entra depresión.  . Muchas gracias por ustedes. .

Les dejo el código, aún así no está terminado, ya que al pulsar el botón ON o OFF me sale error si no abro el puerto primero. Ahí también necesito ayuda, por ejemplo que si me detacta el puerto cerrado, que me diga un mensaje de algo. Puede ser, puerto cerrado, seleccione un puerto y pulse CONECTAR.

Dejo el código aquí.


```
Private Sub ComboBoxCOM_Click()
    ' Configurar MSComm
    With Me.ComboBoxCOM
        MSComm1.CommPort = .ItemData(.ListIndex)
        ' ...
    End With
End Sub

Private Sub Form_Load()
    With Me.ComboBoxCOM
        Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
        For Each wmiobject In WMIObjectSet
            If InStr(wmiobject.Name, "COM") Then
                ComboBoxCOM.AddItem wmiobject.Name
                
                Dim nCom%   ' Buscamos el número del puerto:
                nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
                nCom = Val(Mid(wmiobject.Name, nCom + 3))
    
                ComboBoxCOM.ItemData(.NewIndex) = nCom
            End If
        Next
        Set WMIObjectSet = Nothing
                
        If ComboBoxCOM.ListCount = 0 Then
            MsgBox "No se encontraron puertos COM."
            Exit Sub
        End If

        ' Para seleccionar el primer puerto encontrado:
        ComboBoxCOM.ListIndex = 0
    End With
End Sub


' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm1.PortOpen Then
       MSComm1.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = False
    Else
       MSComm1.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = True
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
    MSComm1.Output = "Led_8_OFF" ' Envía este cadena de carácter por el puerto serie.
End Sub
    
Private Sub Command_Led_8_ON_Click()
    MSComm1.Output = "Led_8_ON" ' Envía este cadena de carácter por el puerto serie.
End Sub
```
Ahora me toca recibir mensajes desde Arduino o PIC o PC y que se muestre en el Text de VB 6.

Un cordial saludo.


*Edito:*
Bueno, mejor dejo deshabilitado los botones ON y OFF y se habilitan cuando se pulse conectar y habra el puerto.

Ahora me falta la parte de que si no hay puerto serie y pulsa botón, que me salga un mensaje de error que no ecuentra un puerto serie.

Dejo el código completo lo que tengo hecho hasta ahora.

```
Private Sub ComboBoxCOM_Click()
    ' Configurar MSComm
    With Me.ComboBoxCOM
        MSComm1.CommPort = .ItemData(.ListIndex)
        ' ...
    End With
End Sub

Private Sub Form_Load()
    With Me.ComboBoxCOM
        Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
        For Each wmiobject In WMIObjectSet
            If InStr(wmiobject.Name, "COM") Then
                ComboBoxCOM.AddItem wmiobject.Name
                
                Dim nCom%   ' Buscamos el número del puerto:
                nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
                nCom = Val(Mid(wmiobject.Name, nCom + 3))
    
                ComboBoxCOM.ItemData(.NewIndex) = nCom
            End If
        Next
        Set WMIObjectSet = Nothing
                
        If ComboBoxCOM.ListCount = 0 Then
            MsgBox "No se encontraron puertos COM."
            Exit Sub
        End If

        ' Para seleccionar el primer puerto encontrado:
        ComboBoxCOM.ListIndex = 0
    End With
End Sub


' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm1.PortOpen Then
       MSComm1.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = False
       Command_Led_8_ON.Enabled = True ' Activar botón ON.
       Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
    Else
       MSComm1.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = True
       Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
       Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
    MSComm1.Output = "Led_8_OFF" ' Envía este cadena de carácter por el puerto serie.
End Sub
    
Private Sub Command_Led_8_ON_Click()
    MSComm1.Output = "Led_8_ON" ' Envía este cadena de carácter por el puerto serie.
End Sub
```
Pueden analizarlo si hay mejoras. Luego me pongo con recibir datos.






Otra cosa, mirando en el proyecto, no encuentro el .exe. ¿Dónde está metido?

Saludos.


----------



## analogico (Abr 4, 2015)

Meta dijo:


> Otra cosa, mirando en el proyecto, no encuentro el .exe. ¿Dónde está metido?
> 
> Saludos.



en el Menu archivo -->Generar


----------



## Meta (Abr 5, 2015)

Les dejo un tutorial en pdf de VB 6 y puerto serie hasta donde he llegado para que lo analicen y me comente com está quedando este tutorial.

Por ahora me han contado que no todo el mundo por Internet hace tutoriales paso a paso en pdf como este. Xddddddddddd.

Ahora me toca la recepción de los datos desde el puerto serie.

Gracias con el apoyo de aquí se ha podido hacer el tutorial.


----------



## analogico (Abr 5, 2015)

pero si desde win2000 soporta .net   para xp ideal es el visualstudio 2005 con el netframework 2


hacerlo en vb6 seria para un win98 o 95

y otra cosa no se puede copiar el codigo del pdf


----------



## Meta (Abr 5, 2015)

Pues mejor, para los que usan Win95/98 que los hay, ejjeeje jejeje.

Me he dado cuenta que hay que mejorar cosas de este pdf para pasarlo en el principal que todavía no haré hasta que esté completo la recpeción de datos.

Gracias por la info y comenté la parte del win95/98. 

Sigo con el tutorial.


*Edito:*
Código mejorado.

```
'Option Explicit

Private Sub Form_Load()

    Dim nCom%   ' Buscamos el número del puerto:
    With Me.ComboBoxCOM
    
        Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
        For Each wmiobject In WMIObjectSet
            If InStr(wmiobject.Name, "COM") Then
                ComboBoxCOM.AddItem wmiobject.Name
                
                nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
                nCom = Val(Mid(wmiobject.Name, nCom + 3))
    
                ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
            End If
        Next
        Set WMIObjectSet = Nothing
                
        If ComboBoxCOM.ListCount = 0 Then
            MsgBox "No se encontraron puertos COM."
            Exit Sub
        End If

        ' Para seleccionar el primer puerto encontrado:
        ComboBoxCOM.ListIndex = 0
    End With
End Sub

Private Sub ComboBoxCOM_Click()
    ' Configurar MSComm
    With Me.ComboBoxCOM
        MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
    End With
End Sub

' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm_Puerto_Serie.PortOpen Then
       MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = False
       Command_Led_8_ON.Enabled = True ' Activar botón ON.
       Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
    Else
       MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = True
       Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
       Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_8_OFF"
End Sub

Private Sub Command_Led_8_ON_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_8_ON"
End Sub
```


----------



## Meta (Abr 6, 2015)

Hola:

Les dejo el código fuente del proyecto en VB 6 para que lo analicen mejor.

Saludos.


----------



## D@rkbytes (Abr 6, 2015)

De la forma en como estás seleccionando el puerto en el ComboBox, no estás seleccionando el número correcto.

Al puerto 1 si lo seleccionas bien: 

Pero del puerto COM2 en adelante, ya no es el número de puerto correcto: 

Estás conectando la interfaz por un puerto superior al seleccionado.

¿Cómo saber esto que menciono?
Usando el depurador de código de VB6 escribiendo esto: 

```
Debug.Print "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
```
Y en la parte inferior del editor verás esto: 
En esas imágenes puse esto:

```
MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
```
Saca la rutina de obtención del número correcto del puerto con el código de aquí: _Interfaz RS-232 Versión RC1_


----------



## analogico (Abr 6, 2015)

Meta dijo:


> Hola:
> 
> Les dejo el código fuente del proyecto en VB 6 para que lo analicen mejor.
> 
> ...


bueno da error si no tienes el puerto serie  ya que los botones no se disable

sin msgbox


```
If ComboBoxCOM.ListCount = 0 Then
            'MsgBox "No se encontraron puertos COM." 
            Me.ComboBoxCOM.Clear
            Me.Command_CONECTAR.Enabled = False
            Me.ComboBoxCOM.Enabled = False
           ' Me.Text_Mensajes.Enabled = False
           Me.Text_Mensajes.FontBold = True
           Me.Text_Mensajes.FontSize = 15
            Me.Text_Mensajes.Text = "ERROR " & vbNewLine & "No se encontraron puertos COM."
           ' Me.Enabled = False
             
            
            Exit Sub
        End If
```

bueno aca dejo otro codigo para linux 

http://jsbsan.blogspot.com/2011/11/mi-primera-aplicacion-gambasarduino.html


----------



## Meta (Abr 7, 2015)

D@rkbytes dijo:


> De la forma en como estás seleccionando el puerto en el ComboBox, no estás seleccionando el número correcto.
> 
> Al puerto 1 si lo seleccionas bien: Ver el archivo adjunto 127756
> 
> ...



Hola:

Con esta línea '################################### sabes donde he puesto el trozo de código que hiciste en el mío aquí de abajo.

Pues si, si se selecciona el puerto porque lo elijo y  hay problemas, incluido cuando tengo Arduino UNO y el otro Arduino Micro y el puerto físico COM1.


```
'Option Explicit

Private Sub Form_Load()

    Dim nCom%   ' Buscamos el número del puerto:
    With Me.ComboBoxCOM
    
        Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
        For Each wmiobject In WMIObjectSet
            If InStr(wmiobject.Name, "COM") Then
                ComboBoxCOM.AddItem wmiobject.Name
                
                nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
                nCom = Val(Mid(wmiobject.Name, nCom + 3))
    
                ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
            End If
        Next
        Set WMIObjectSet = Nothing
                
        If ComboBoxCOM.ListCount = 0 Then
            MsgBox "No se encontraron puertos COM."
            Exit Sub
        End If

        ' Para seleccionar el primer puerto encontrado:
        ComboBoxCOM.ListIndex = 0
    End With
End Sub

Private Sub ComboBoxCOM_Click()
    ' Configurar MSComm
    With Me.ComboBoxCOM
        MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
    End With
    '###########################################################################
    Debug.Print "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    '###########################################################################
End Sub

' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm_Puerto_Serie.PortOpen Then
       MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = False
       Command_Led_8_ON.Enabled = True ' Activar botón ON.
       Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
    Else
       MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = True
       Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
       Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_8_OFF"
End Sub

Private Sub Command_Led_8_ON_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_8_ON"
End Sub
```
He comprobado con el código de VB .net que si funciona Arduino Micro seleccionando otro puerto. Pensé que mi código si funcionaba y veo que no. .



analogico dijo:


> bueno da error si no tienes el puerto serie  ya que los botones no se disable
> 
> sin msgbox
> 
> ...



¿Dónde pongo ese código exactamente?

Código completo.

```
'Option Explicit

Private Sub Form_Load()

    Dim nCom%   ' Buscamos el número del puerto:
    With Me.ComboBoxCOM
    
        Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
        For Each wmiobject In WMIObjectSet
            If InStr(wmiobject.Name, "COM") Then
                ComboBoxCOM.AddItem wmiobject.Name
                
                nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
                nCom = Val(Mid(wmiobject.Name, nCom + 3))
    
                ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
            End If
        Next
        Set WMIObjectSet = Nothing
                
     '###########################################################################
        If ComboBoxCOM.ListCount = 0 Then
            'MsgBox "No se encontraron puertos COM."
            Me.ComboBoxCOM.Clear
            Me.Command_CONECTAR.Enabled = False
            Me.ComboBoxCOM.Enabled = False
           ' Me.Text_Mensajes.Enabled = False
           Me.Text_Mensajes.FontBold = True
           Me.Text_Mensajes.FontSize = 15
            Me.Text_Mensajes.Text = "ERROR " & vbNewLine & "No se encontraron puertos COM."
           ' Me.Enabled = False
            Exit Sub
        End If
     '###########################################################################

        ' Para seleccionar el primer puerto encontrado:
        ComboBoxCOM.ListIndex = 0
    End With
End Sub

Private Sub ComboBoxCOM_Click()
    ' Configurar MSComm
    With Me.ComboBoxCOM
        MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
    End With
    '###########################################################################
    Debug.Print "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    '###########################################################################
End Sub

' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm_Puerto_Serie.PortOpen Then
       MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = False
       Command_Led_8_ON.Enabled = True ' Activar botón ON.
       Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
    Else
       MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = True
       Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
       Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_8_OFF"
End Sub

Private Sub Command_Led_8_ON_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_8_ON"
End Sub
```

Gracias por el gambas, cuando acabe lo del VB 6 de las narices que tengo que empezar de nuevo hacer el tutorial para corregir fallos, y gracias a ustedes estoy avanzando.  Me meto con Linux y Gambas, también con Java con PC de sobremesa, también usaré Raspbian con Raspberry Pi 2 que se peude hacer. Todo eso en otro tutorial a parte. 

Saludos.


----------



## D@rkbytes (Abr 7, 2015)

Usa esta función para obtener el número del puerto seleccionado en el ComboBox:

```
[COLOR=Blue]Private Function[/COLOR] Get_CommPort(ComboPuertos [COLOR=Blue]As[/COLOR] ComboBox) [COLOR=Blue]As Integer[/COLOR]
   [COLOR=Green] ' Obtener y retornar únicamente el número del puerto seleccionado.[/COLOR]
    [COLOR=Blue]Dim[/COLOR] StrPos%
    [COLOR=Blue]Dim[/COLOR] Cadena$
    StrPos = InStr(1, ComboPuertos.Text, "(")
    
   [COLOR=Blue] If [/COLOR]StrPos [COLOR=Blue]Then[/COLOR]
        Cadena = [COLOR=Blue]CStr([/COLOR]Mid(ComboPuertos.Text, StrPos, 6)[COLOR=Blue])[/COLOR]
        Get_CommPort = [COLOR=Blue]CStr([/COLOR]Val(Mid(Cadena, 5, 2))[COLOR=Blue])[/COLOR]
    [COLOR=Blue]Else[/COLOR]
        Get_CommPort = 0
    [COLOR=Blue]End If[/COLOR]
[COLOR=Blue]End Function[/COLOR]
```
El valor de retorno es el número encontrado en la cadena del primer "COM*X*"

Y así llamas a la función:

```
Variable = Get_CommPort(El_ComboBox)
```
Si retorna un número diferente a 0, todo bien y sigues, si retorna 0, algo va mal y das aviso.

Saludos.


----------



## Meta (Abr 7, 2015)

Hola:

¿Puedes poner el código completo con ese trozo de código?

Saludos.


----------



## analogico (Abr 7, 2015)

D@rkbytes dijo:


> De la forma en como estás seleccionando el puerto en el ComboBox, no estás seleccionando el número correcto.
> 
> Al puerto 1 si lo seleccionas bien: Ver el archivo adjunto 127756
> 
> Pero del puerto COM2 en adelante, ya no es el número de puerto correcto: Ver el archivo adjunto 127757 [/URL]



Pero se supone que el numero del puerto se guarda en el itemdata 
en esta linea 

```
ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
```
 
por eso despues cuando conecta usa esto para sacar el numero de puerto



> MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)



lo probe con puertos com superiores a 10 y funciona bien

bueno como sea

el evento_ Private Sub ComboBoxCOM_Click()_ sobra
quedaria mejor  asi




```
Private Sub Command_CONECTAR_Click()
   If Not MSComm_Puerto_Serie.PortOpen Then
[B] MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex) [/B]
 
       MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = False
       Command_Led_8_ON.Enabled = True ' Activar botón ON.
       Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
    Else
       MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = True
       Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
       Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
    End If
End Sub
```

y

s





D@rkbytes dijo:


> Usa esta función para obtener el número del puerto eleccionado en el ComboBox:
> 
> ```
> [COLOR=Blue]Private Function[/COLOR] Get_CommPort(ComboPuertos [COLOR=Blue]As[/COLOR] ComboBox) [COLOR=Blue]As Integer[/COLOR]
> ...



usando matrices sale mas facil

```
Function CommPort(cadena As String) As Integer
Dim matrix() As String
matrix = Split(cadena, "(COM")
If UBound(matrix) > 0 Then
CommPort= Replace(matrix(1), ")", "")
 Else: CommPort= 0
End If
End Function
```


----------



## D@rkbytes (Abr 7, 2015)

Meta dijo:


> ¿Puedes poner el código completo con ese trozo de código?


Claro, pero para que lo entiendas mejor, adjunto un ejemplo.



analogico dijo:


> Pero se supone que el número del puerto se guarda en el ItemData,
> en esta línea:
> 
> ```
> ...


Esa es la forma en como Meta lo está haciendo, yo uso otra forma.


analogico dijo:


> Lo probé con puertos COM superiores a 10 y funciona bien.


Adjunté unas fotos al respecto para demostrar que no siempre se obtiene el puerto correcto de esa forma.


analogico dijo:


> Usando matrices sale más fácil.


No es que sea más fácil así, es sólo otra forma de hacerlo. 

Saludos.


----------



## Meta (Abr 8, 2015)

Buenas:

Me estoy liando... 

Dejo el códig que aparentemente funciona bien. He modificado como dice analógico algo y en vez de usar Led_8_ON y Led_8_OFF esos 8 lo he cambiado por : Led_13_ON y Led_13_OFF ya que tengo conectado Arduino UNO y Arduino Micro.

He cambiado.

```
MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
```
por

```
Label_Mensaje_Puerto_Seleccionado.Caption = "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
```
Le he puesto abajo un label nuevo para que no me salga en pantalla los mensajes y tenga que pulsar Aceptar, así no lo veo tan incómodo.

El código compelto que tengo hecho por ahora es este.

Me funciona bien, he comprobado los dos Arduinos y funcioina bien.


```
'Option Explicit

Private Sub Form_Load()

    Dim nCom%   ' Buscamos el número del puerto:
    With Me.ComboBoxCOM
    
        Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
        For Each wmiobject In WMIObjectSet
            If InStr(wmiobject.Name, "COM") Then
                ComboBoxCOM.AddItem wmiobject.Name
                
                nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
                nCom = Val(Mid(wmiobject.Name, nCom + 3))
    
                ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
            End If
        Next
        Set WMIObjectSet = Nothing
                
     '###########################################################################
        If ComboBoxCOM.ListCount = 0 Then
            'MsgBox "No se encontraron puertos COM."
            Me.ComboBoxCOM.Clear
            Me.Command_CONECTAR.Enabled = False
            Me.ComboBoxCOM.Enabled = False
           ' Me.Text_Mensajes.Enabled = False
           Me.Text_Mensajes.FontBold = True
           Me.Text_Mensajes.FontSize = 15
            Me.Text_Mensajes.Text = "ERROR " & vbNewLine & "No se encontraron puertos COM."
           ' Me.Enabled = False
            Exit Sub
        End If
     '###########################################################################

        ' Para seleccionar el primer puerto encontrado:
        ComboBoxCOM.ListIndex = 0
    End With
End Sub

Private Sub ComboBoxCOM_Click()
    ' Configurar MSComm
    With Me.ComboBoxCOM
        MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
    End With
    ' D@rkbytes ###########################################################################
    Debug.Print "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    'MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    Label_Mensaje_Puerto_Seleccionado.Caption = "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    '###########################################################################
End Sub

' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm_Puerto_Serie.PortOpen Then
    ' analogico ###########################################################################
     MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
    '###########################################################################
       MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = False
       Command_Led_8_ON.Enabled = True ' Activar botón ON.
       Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
    Else
       MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = True
       Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
       Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_13_OFF"
End Sub

Private Sub Command_Led_8_ON_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_13_ON"
End Sub
```
El único problema que le veo que que cuando dejo este código desde el principio.

```
Option Explicit
```
Al ejecutar me sale este error.


Me señala aquí siempre.


¿A ustedes les pasa?

Si dejo documentado así:

```
'Option Explicit
```

Funciona de maravilla.
Por lo que veo en el código general, funciona bien y lo he comprobado. Ahora solo falta, bajo mi punto devista, quitar el label que puse nuevo para saber si realmente selecciona los puertos, cosa que haré al final de todo cuando esté al 100 % seguro de que funciona y, la entradas de datos del puerto serie, cuando Arduino envías tramas de bytes que dice: "Led 13 a sido apagado". Solo recibe mensajes.

Les dejo el proyecto para que lo descarguen, analicen más a fondo y cómodo..


----------



## analogico (Abr 8, 2015)

Meta dijo:


> Buenas:
> 
> Me estoy liando...
> 
> ...



no entiendo nada de led13

pero el error option explicit es por que falta declarar las variables en el evento load

```
Dim WMIObjectSet As Object
    Dim wmiobject As Object
```


y  al colocar       en el boton conectar  
	
	



```
###########################################################################
     MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
    '###############################################################
```
 el evento clic  sobra pero no afecta en el funcionanmiento


y 
	
	



```
Label_Mensaje_Puerto_Seleccionado.Caption = "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
```
 
puedes usar el mismo cuadro de texto grande para todos los mensajes

```
Label_Mensaje_Puerto_Seleccionado.Caption = "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
```
 

```
Me.Text_Mensajes.Text="Conectado al : COM" & MSComm_Puerto_Serie.CommPort & vbnewline
```

y falta un  limpia  texto  

```
Me.Text_Mensajes.Text=""
```


----------



## Meta (Abr 8, 2015)

Buenas:

El Led 13 hacer referencia al pin 13 del Arduino UNO y Micro, ya que en la propia placa viene integrado para hacer pruebas, como el parpadero de un Led.







Eso es lo que me refiero el Led 13.

Pues si, por fin funciona bien.

```
' Variables del evento load.
    Dim WMIObjectSet As Object
    Dim wmiobject As Object
```

Código completo.

```
Option Explicit

' Variables del evento load.
    Dim WMIObjectSet As Object
    Dim wmiobject As Object

Private Sub Form_Load()

    Dim nCom%   ' Buscamos el número del puerto:
    With Me.ComboBoxCOM
    
        Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
        For Each wmiobject In WMIObjectSet
            If InStr(wmiobject.Name, "COM") Then
                ComboBoxCOM.AddItem wmiobject.Name
                
                nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
                nCom = Val(Mid(wmiobject.Name, nCom + 3))
    
                ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
            End If
        Next
        Set WMIObjectSet = Nothing
                
     '###########################################################################
        If ComboBoxCOM.ListCount = 0 Then
            'MsgBox "No se encontraron puertos COM."
            Me.ComboBoxCOM.Clear
            Me.Command_CONECTAR.Enabled = False
            Me.ComboBoxCOM.Enabled = False
           ' Me.Text_Mensajes.Enabled = False
           Me.Text_Mensajes.FontBold = True
           Me.Text_Mensajes.FontSize = 15
            Me.Text_Mensajes.Text = "ERROR " & vbNewLine & "No se encontraron puertos COM."
           ' Me.Enabled = False
            Exit Sub
        End If
     '###########################################################################

        ' Para seleccionar el primer puerto encontrado:
        ComboBoxCOM.ListIndex = 0
    End With
End Sub

Private Sub ComboBoxCOM_Click()
    ' Configurar MSComm
    With Me.ComboBoxCOM
        MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
    End With
    ' D@rkbytes ###########################################################################
    Debug.Print "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    'MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    Label_Mensaje_Puerto_Seleccionado.Caption = "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    '###########################################################################
End Sub

' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm_Puerto_Serie.PortOpen Then
    ' analogico ###########################################################################
     MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
    '###########################################################################
       MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = False
       Command_Led_8_ON.Enabled = True ' Activar botón ON.
       Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
    Else
       MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = True
       Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
       Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_13_OFF"
End Sub

Private Sub Command_Led_8_ON_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_13_ON"
End Sub
```

He comrpobado que funciona todo, con las variables esas también.
¿Falta algo más antes de empezar con la entrada de datos del puerto serie?

Saludos.


----------



## analogico (Abr 8, 2015)

las  Variables del evento load  las
deberian ir en el eveto load por que es el unico lugar donde se usan
es cosa del ambito de las variables y la optimizacion del programa


----------



## Meta (Abr 8, 2015)

Entonces así:


```
Option Explicit

Private Sub Form_Load()
    Dim WMIObjectSet As Object ' Variables del evento load.
    Dim wmiobject As Object
    Dim nCom%   ' Buscamos el número del puerto:
    With Me.ComboBoxCOM
    
        Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
        For Each wmiobject In WMIObjectSet
            If InStr(wmiobject.Name, "COM") Then
                ComboBoxCOM.AddItem wmiobject.Name
                
                nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
                nCom = Val(Mid(wmiobject.Name, nCom + 3))
    
                ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
            End If
        Next
        Set WMIObjectSet = Nothing
                
     '###########################################################################
        If ComboBoxCOM.ListCount = 0 Then
            'MsgBox "No se encontraron puertos COM."
            Me.ComboBoxCOM.Clear
            Me.Command_CONECTAR.Enabled = False
            Me.ComboBoxCOM.Enabled = False
           ' Me.Text_Mensajes.Enabled = False
           Me.Text_Mensajes.FontBold = True
           Me.Text_Mensajes.FontSize = 15
            Me.Text_Mensajes.Text = "ERROR " & vbNewLine & "No se encontraron puertos COM."
           ' Me.Enabled = False
            Exit Sub
        End If
     '###########################################################################

        ' Para seleccionar el primer puerto encontrado:
        ComboBoxCOM.ListIndex = 0
    End With
End Sub

Private Sub ComboBoxCOM_Click()
    ' Configurar MSComm
    With Me.ComboBoxCOM
        MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
    End With
    ' D@rkbytes ###########################################################################
    Debug.Print "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    'MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    Label_Mensaje_Puerto_Seleccionado.Caption = "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    '###########################################################################
End Sub

' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm_Puerto_Serie.PortOpen Then
    ' analogico ###########################################################################
     MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
    '###########################################################################
       MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = False
       Command_Led_8_ON.Enabled = True ' Activar botón ON.
       Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
    Else
       MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = True
       Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
       Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_13_OFF"
End Sub

Private Sub Command_Led_8_ON_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_13_ON"
End Sub
```

¿Ya se puede urgar en los datos de entrada del puerto serie?

Espero que no sea tan complicado como todo esto.

Saludos.


----------



## analogico (Abr 8, 2015)

Meta dijo:


> ¿Ya se puede urgar en los datos de entrada del puerto serie?
> 
> Espero que no sea tan complicado como todo esto.
> 
> Saludos.



pues si 

y no es complicado
solo lo hiciste del modo difici


----------



## Meta (Abr 8, 2015)

Por lo que veo, hay que suar input. Luego almacenarlo en una variable todo lo que entra en input y soltarlo en el text. Cosa que se dice pronto, espero no tener que hacerlo difícil. :=

Voy a por ello...

Muchas gracias a todos.


----------



## Meta (Abr 10, 2015)

Hola:

Analizando el código de nuestro amigo con su _programa que recomendó_, tenemos esto:


```
Private Sub RS232_OnComm()
    ' Recibir los datos del puerto serie
    Dim szData$
    Dim sNum As Byte
    Dim x%
    Select Case RS232.CommEvent
        ' Evento de recepción de datos
        Case comEvReceive
            ' Leer datos del puerto
            szData = RS232.Input

            If mnuExtras(2).Checked = True Then
                szData = RemoveChar(szData, Chr(13))
                szData = RemoveChar(szData, Chr(10))
            End If

            On Error GoTo ErrDep

            If optRxOptions(0) Then
                ' Mostrar los datos de entrada con valor binario de 8 bits.
                txtRX.Text = txtRX.Text & DecToBin(Asc(szData), 8) & " "
            End If
    
            If optRxOptions(1) Then
                ' Si se checa la opción Decimal, mostrar el número ASCII.
                    txtRX.Text = txtRX.Text & Asc(szData) & " "
            End If
    
            If optRxOptions(2) Then
                ' Si se checa la opción Hexadecimal, mostrar el número Hex.
                txtRX.Text = txtRX.Text & Hex(Asc(szData)) & " "
            End If
    
            If optRxOptions(3) Then
                ' Mostrar lo que se ingresa.
                txtRX.Text = txtRX.Text & szData
            End If
    
            If optRxOptions(4) Then
                ' Convertir los datos recibidos a bytes para mostrarlos en los LED's.
                sNum = Asc(szData)
                For x = 7 To 0 Step -1
                    If sNum And 2 ^ x Then
                        chkSW(x).Value = 1
                    Else
                        chkSW(x).Value = 0
                    End If
                    chkSW(x).Refresh
                Next x
            End If
 
        Case comEvEOF
            txtRX.Text = txtRX.Text & _
            "Se produjo una detección de fin de archivo." & vbCrLf
    End Select
    
    txtRX.SelStart = Len(txtRX.Text)

ErrDep: ' Depuración de errores
    If Err.Number <> 0 Then
        txtRX.Text = "Ocurrio un error durante la recepción de datos." & vbCrLf & _
        "Descripción: " & Err.Description
        Err.Clear
        Exit Sub
    End If
End Sub
```
Mi opinión personal. Aquí veo mucho profesionalidad.

Lo que busco es básico, solo que  al llegar desde Arduino, PIC o un simple PC datos o mensajes de texto y que se muestre en el Tesxt.

Mi intención es usar esto:

```
Private Sub MSComm_Puerto_Serie()
    MSComm_Puerto_Serie.Input = Text_Mensajes.Text
End Sub
```

En VB 6 pesco mucho. jejejejejeje. Quiero decir que no me entero. Me falta poner una variable que almacene los datos de entrada, luego esa variable donde tiene los datos o mensajes almacenados, lo deposita en el Text_Mensajes.Text.

¿Cómo se hace en VB?

Saludos.


----------



## analogico (Abr 10, 2015)

Meta dijo:


> Hola:
> 
> 
> Private Sub RS232_OnComm()
> ...




No te entiendo pero la recepcion se hace en el evento OnComm del componente serial





			
				analogico dijo:
			
		

> No te entiendo pero la recepcion se hace en el evento OnComm del componente serial



no lo he probado pero recortando ese codigo seria mas menos


```
if RS232.CommEvent =comEvReceive then
   
            szData = RS232.Input

end if
```


----------



## D@rkbytes (Abr 10, 2015)

Usa el evento OnComm del control MSComm32
Dentro de ese evento, en lo personal uso Un Select Case porque puedo filtrar eventos.
También puedes hacerlo directo dentro del evento OnComm sin usar la selección.
Por ejemplo: (Va escrito aquí al vuelo, espero no equivocarme.)

```
Private Sub MSComm1_OnComm()
    Dim Dato_Recibido As String
    
    Dato_Recibido = MSComm1.Input
    
    Text1.Text = Text1.Text & Dato_Recibido
End Sub
```
Digamos que el Evento OnComm viene siendo el servicio de interrupción por recepción RS-232.
Lógicamente aquí no se interrumpe nada.

En el TextBox donde vas a mostrar los datos, establece las siguientes propiedades:
Locked = True
MultiLine = True
ScrollBars 3 - Both

Y aquí viene el truco para que la recepción de datos funcione.
En el evento Form_Load o en la página de propiedades (Búfer) del control MSComm32 debes establecer en 1 la propiedad "RThreshold"


----------



## Meta (Abr 10, 2015)

¡¡¡Por fiiiiiiiiiiiiiiiiiiiiiiiiinnn funciona!!!




```
Private Sub MSComm_Puerto_Serie_OnComm()
    Dim Dato_Recibido As String ' Variable para almacenar datos.
    Dato_Recibido = MSComm_Puerto_Serie.Input ' Los datos recibidos lo almacena en la variable.
    Text_Mensajes.Text = Text_Mensajes.Text & Dato_Recibido ' Los datos de la varible lo muestra en el Text.
End Sub
```
Pensé que me iba a pegar media vida como al principio. Antes de continuar a modelar el tutorial desde el principio, la parte de VB 6 claro. Quiero hacer como hice con los otros lenguajes y este no se hacerlo, es:

Si te fijas bien, al llegarle muchos mensajes se activa la barra vertical, pero no se ve los datos al macenados, tienes que tocar la barra vertical hacia abajo para ver lo que está entrando.

¿Cómo se pone en la posición abajo por cada actualización de datos?

Por si acaso, en VB .net les dejo el trozo de código que se hace así, para darles ideas de lo que me refiero.


```
' Procesador los datos recibidos en el buffer y extraer tramas copletas.
    Private Sub Actualizar(ByVal s As Object, ByVal e As EventArgs)
        ' Asignar el valor de la trama textBox.
        RichTextBox_Mensajes.Text = Recibidos

        ' Selecciona la posición final para leer los mensajes entrantes.
        RichTextBox_Mensajes.SelectionStart = RichTextBox_Mensajes.Text.Length

        ' Mantiene el scroll en la entrada de cada mensaje.
        RichTextBox_Mensajes.ScrollToCaret()
    End Sub
```
Un saludo.


----------



## D@rkbytes (Abr 10, 2015)

Meta dijo:


> Si te fijas bien, al llegarle muchos mensajes se activa la barra vertical, pero no se ven los datos al macenados, tienes que tocar la barra vertical hacia abajo para ver lo que está entrando.
> 
> ¿Cómo se pone en la posición abajo por cada actualización de datos?


Eso está en el _fragmento de código_ que colocaste anteriormente sobre mi programa:
* txtRX.SelStart = Len(txtRX.Text)*

En tu caso sería así:
*TextMensajes.SelStart = Len(TextMensajes.Text)*

Esa parte colócala al final de las instrucciones de recepción.


----------



## analogico (Abr 10, 2015)

se puede hacer usando el api  y simular el boton de scroll

declara en un modulo

```
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
```

en elformulario

```
Private Const EM_SCROLL = &HB5
 
Private Const SB_PAGEDOWN = 3
 
Private Const SB_PAGEUP = 2
 
Private Const SB_LINEUP = 0
 
Private Const SB_LINEDOWN = 1
 
Private Const SB_BOTTOM = 7
 
Private Const SB_TOP = 6
```


y cuando quieras ir al fin  aqui puedes probar con los doevents si no  se actualiza el texbox
o los quitas


```
DoEvents
    SendMessage Text_Mensajes.hWnd, EM_SCROLL, SB_BOTTOM, 0
 DoEvents
```

muy simple no

lo saque de aca por que no lo recodaba bien
http://www.vbforfree.com/advanced-textbox-manipulation-in-visual-basic-and-vb-net-part-2/#more-1311

ahora lei 
el post de arriba se ve mas simple
SelStart


----------



## Meta (Abr 10, 2015)

Buenas:

Por fin me funciona todo completo, al menos eso creo. ejjejejejej. Me responde Arduino UNO como Arduino Micro que tengo.

Código completo por si acaso.

```
Option Explicit

Private Sub Form_Load()
    Dim WMIObjectSet As Object ' Variables del evento load.
    Dim wmiobject As Object
    Dim nCom%   ' Buscamos el número del puerto:
    With Me.ComboBoxCOM
    
        Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
        For Each wmiobject In WMIObjectSet
            If InStr(wmiobject.Name, "COM") Then
                ComboBoxCOM.AddItem wmiobject.Name
                
                nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
                nCom = Val(Mid(wmiobject.Name, nCom + 3))
    
                ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
            End If
        Next
        Set WMIObjectSet = Nothing
            
        If ComboBoxCOM.ListCount = 0 Then
            'MsgBox "No se encontraron puertos COM."
            Me.ComboBoxCOM.Clear
            Me.Command_CONECTAR.Enabled = False
            Me.ComboBoxCOM.Enabled = False
           ' Me.Text_Mensajes.Enabled = False
           Me.Text_Mensajes.FontBold = True
           Me.Text_Mensajes.FontSize = 15
            Me.Text_Mensajes.Text = "ERROR " & vbNewLine & "No se encontraron puertos COM."
           ' Me.Enabled = False
            Exit Sub
        End If

        ' Para seleccionar el primer puerto encontrado:
        ComboBoxCOM.ListIndex = 0
    End With
End Sub

Private Sub ComboBoxCOM_Click()
    ' Configurar MSComm
    With Me.ComboBoxCOM
        MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
    End With
    Debug.Print "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
    'MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
End Sub

' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
    If Not MSComm_Puerto_Serie.PortOpen Then
     MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
       MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie.
       Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = False
       Command_Led_8_ON.Enabled = True ' Activar botón ON.
       Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
    Else
       MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie.
       Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
       ComboBoxCOM.Enabled = True
       Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
       Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
    End If
End Sub

Private Sub Command_Led_8_OFF_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_8_OFF"
End Sub

Private Sub Command_Led_8_ON_Click()
' Envía este cadena de carácter por el puerto serie.
    MSComm_Puerto_Serie.Output = "Led_8_ON"
End Sub


Private Sub MSComm_Puerto_Serie_OnComm()
    Dim Dato_Recibido As String ' Variable para almacenar datos.
    Dato_Recibido = MSComm_Puerto_Serie.Input ' Los datos recibidos lo almacena en la variable.
    Text_Mensajes.Text = Text_Mensajes.Text & Dato_Recibido ' Los datos de la varible lo muestra en el Text.
    Text_Mensajes.SelStart = Len(Text_Mensajes.Text) ' Mantiene el scroll en la entrada de cada mensaje.
End Sub
```

Les pondré como colaboradores en el tutorial los que los deseen. Algunos ya los tengo puestos.

Saludos.


----------



## Meta (Abr 11, 2015)

Hola:

Antes que nada, muchísimas gracias a todos.

Les dejo una demostración 2 del tutorial sobre VB 6 para los novatos, me inlcuyo, ejejjejeje . Se ha ehcho posible gracias a la colaboración o si no no hubiera sido posible. .

Este pequeño PDF de VB es temporal, así que aprovechen para que le den un vistazo y opinen como va el tutorial en general y si realmente aporta ayuda para sus proyectos. Mucho más adelante, cuando todo esté acabado, seguiré con el tutorial principal de muchos lenguajes como C#, VB .net C++, Java y VB 6. Si quieren un ejemplo de esto que digo, lo piden y se los paso por privado.

Descargar

Un cordial saldudo.

PD: _Ahora me toca con la electrónica y programación de Arduino.._


----------



## analogico (Abr 11, 2015)

para que es el timer de la pagina 18?


----------



## Meta (Abr 11, 2015)

En este caso, de adorno. Xdddddddddddd. Debo corregir esta parte, como no combrarlo.


----------

