Comunicación serial con Visual Basic 2008

Bájate el proyecto del ejemplo ya compilado y compruébalo, a todo el mundo le funciona.

O vete al administrador y comrpueba los puertos si los usa en otra aplicación o no.
 
La verdad es que lo que quiero en si es comunicarme con el arduino mediante el visual basic, lo que estoy usando en si no es un puerto serie real, si no el convertidor USB/serial que trae el mismo arduino no se si esto tenga algo que ver con que me indique que mi puerto esta cerrado.

PD. el puerto no esta siendo usado en ninguna otra aplicacion
 
Que tal colegas. Bueno, primero que nada quiero felicitar a todos los que desarrollaron esta aplicación, es excelente y funciona de maravilla, disculpen la tardanza, pero había estado trabajando y no había podido darles las gracias.
Para esto, pues... solo me queda hacerles una última pregunta, saben como le podría hacer para elegir el puerto com a utilizar? ya que mi computadora cuenta con dos puertos com, y por default el programa en visual basic direcciona el puerto COM1, pero quisiera que me manejara el puerto COM3, algúna idea.
Muchas gracias.
 
No recuerdo donde, pero en un lugar de este foro puse un enlace que no recuerdo de como hacer. Te lo detecta automáticamente desde el comboBox y si tiens del COM3 al COM4 virtual también.
 
Saludos, Meta, acabo de resolver el problema de la siguiente forma: En la ventana de propiedades de SerialPort en visual basic, solo colocas COM3, o el COM que gustes en la parte que dice PortName. Compilas y listo, funciona de maravilla. Muchas gracias a todos. En especial al colega Meta.
Saludos.
 
Ya quedó, en VB2008 es parecido que con C#:

Código:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim data(1) As Byte
        data(0) = Asc(1)
        SerialPort1.Write(data, 0, 1)
        Label1.Text = data(0)
    End Sub

En ese caso estoy transmitiendo un 1 en ASCII, la función Asc() obtiene el código numérico correspondiente al caracter ASCII, siempre es más fácil escribir el símbolo ASCII que escribir un 49

hola Picman.... una pequeña duda, por lo que observo estas enviando una orden al pic "perfecto" a traves del puerto serial.
Pero no hay que "inicializar el puerto serial primero para poder utilizarlo", te digo por que en esta pagina de MSDN salia que habia q hacer esto primero. estoy en la duda ???
porfavor.
http://blogs.msdn.com/tolong/archive...07/690851.aspx
Gracias
 
Una pregunta, tengo el convertidor de usb a serial , mi computadora no tiene puerto serie ni paralelo, el convertidor trae tambien de serie a paralelo, podria mandar desde visual basic por el puerto serie, y que la salida sea por el puerto paralelo, o lo tengo que enviar directamente en paralelo desde el programa, la compu solo me dectecta el com como serie por eso es mi duda, necesito utilizar el puerto paralelo.


y si vas a usar el puerto serie si es necesario que lo abras, usa el codigo de la pagina que pusiste si funciona

SerialPort1.Open()
SerialPort1.Close()
 
Última edición:
Hola, he empezado un proyecto en el cual pretendo conectar un circuito a la PC, el circuito consta de un LM35 en cual leo con un PIC16F876A. El PIC se encarga de leer el sensor, convertir el valor leido en su equivalente en ASCII enviar este resultado seguido por el caracter "-" para anunciar el fin de la transmición, la parte del PIC la domino con gran facilidad, es mas, simule el programa en el ISIS del PROTEUS y me responde bien, el problema viene a la hora de hacer la programacion de la PC. El programa de la PC no responde. Espero que puedan ayudarme. Muy atte. sebitronic

PD: dejo los programas del micro y la PC.

Código:
; Programa encargado de leer un sensor
;de temperatura LM35 y enviar la 
;informacion a la PC.

	LIST	P=16F876A
	INCLUDE	"P16F876A.INC"

#DEFINE	BIN		20H
#DEFINE 	BCDL		2AH
#DEFINE	BCDH		2BH
#DEFINE	RCBUF	2CH


__CONFIG	_CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF 

		ORG	0X0000
		GOTO		INICIO 

INICIO	MOVLW	B'10010000'
		MOVWF	RCSTA
		MOVLW	B'11000001'
		MOVWF	ADCON0
		BSF		STATUS,RP0
		BCF		OPTION_REG,NOT_RBPU
		MOVLW	H'F0'
		MOVWF	TRISB
		BCF		TRISC,4
		MOVLW	B'00100100'
		MOVWF	TXSTA
		MOVLW	D'129'
		MOVWF	SPBRG
		MOVLW	B'01001111'
		MOVWF	ADCON1
		BCF		STATUS,RP0
		CLRF		PORTA
		CLRF		PORTB
		CLRF		PORTC

LOOP		BSF		ADCON0,GO
L1		BTFSC	ADCON0,GO
		GOTO		L1
		BTFSC	PIR1,RCIF
		CALL		RECEPT
		MOVF		ADRESH,W
		MOVWF	20H
		CALL		L5
		MOVF		22H,W
		MOVWF	TXREG
L2		BTFSS	PIR1,TXIF
		GOTO		L2
		MOVF		21H,W
		MOVWF	TXREG
L3		BTFSS	PIR1,TXIF
		GOTO		L3
		MOVLW	'-'
		MOVWF	TXREG
L4		BTFSS	PIR1,TXIF
		GOTO		L4

		GOTO		LOOP
	
L5      clrf    BCDH
        clrf    BCDL
BCD_HIGH
        movlw   .100
        subwf   BIN,f
        btfss   STATUS,C
        goto    SUMA_100
        incf    BCDH,f
        goto    BCD_HIGH
SUMA_100
        movlw   .100
        addwf   BIN,f
        movlw   0x0F
        movwf   BCDL
BCD_LOW movlw   .10
        subwf   BIN,f
        btfss   STATUS,C
        goto    SUMA_10
        incf    BCDL
        movlw   0x0F
        iorwf   BCDL
        goto    BCD_LOW
SUMA_10 movlw   .10
        addwf   BIN,f
        movlw   0xF0
        andwf   BCDL,f
        movf    BIN,w
        iorwf   BCDL,f
		
		CLRF		22H
		CLRF		21H
		BTFSC	BCDL,0
		BSF		21H,0
		BTFSC	BCDL,1
		BSF		21H,1
		BTFSC	BCDL,2
		BSF		21H,2
		BTFSC	BCDL,3
		BSF		21H,3
		BSF		21H,4
		BSF		21H,5
		BTFSC	BCDL,4
		BSF		22H,0
		BTFSC	BCDL,5
		BSF		22H,1
		BTFSC	BCDL,6
		BSF		22H,2
		BTFSC	BCDL,7
		BSF		22H,3
		BSF		22H,4
		BSF		22H,5

        RETURN

RECEPT	MOVF		RCREG,W
		MOVWF	RCBUF
		MOVLW	'D'
		SUBWF	RCBUF,W
		BTFSC	STATUS,Z
		BSF		PORTC,0
		MOVLW	'S'
		SUBWF	RCBUF,W
		BTFSC	STATUS,Z
		BCF		PORTC,0
		RETURN



END

Código:
Public Class Form1


    Dim aux As Byte
    Dim rcbuf As Byte
    Dim textout As String

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Me.Text = "LM35 en PC"
        Me.BackColor = Color.Black
        Label1.Text = "00"
        Label2.Text = "Cº"
        Label3.Text = "Power by LM35"
        Label1.ForeColor = Color.Blue
        Label2.ForeColor = Color.Blue
        Label3.ForeColor = Color.White
        Label4.ForeColor = Color.White

    End Sub

    Function ReceiveSerialData() As String

        Using com1 As IO.Ports.SerialPort = _
          My.Computer.Ports.OpenSerialPort("COM1")
            com1.Write("D")
            rcbuf = com1.ReadByte
            Label4.Text = rcbuf
            ' If rcbuf = "-" Then
            'Label1.Text = textout
            'Else
            'textout += rcbuf
            'End If


            If textout > 24 Then
                Label1.ForeColor = Color.Red
            Else
                If textout > 15 Then
                    Label1.ForeColor = Color.Green
                Else
                    Label1.ForeColor = Color.Blue
                End If
            End If
            Label2.ForeColor = Label1.ForeColor
        End Using
    End Function

End Class
 

Adjuntos

  • LM35 en Pc.JPG
    LM35 en Pc.JPG
    7.6 KB · Visitas: 81
Hola:

temperatura_lm35.gif

El código está muy bueno del ASM. Si te funciona lo paso a Visual C#. Otra cosa. ¿No es sensillo usar un sensor de temperatura con el protocolo I2C? Cada cez se usa más.

Si puedes es bueno que cuando acabes con el código del ASM escribe detalladamente cada línea de código para poder entender bien el programa.

En código en C# es:
Código:
public class Form1
{
    
    
    byte aux;
    byte rcbuf;
    string textout;
    
    private void  // ERROR: Handles clauses are not supported in C#
Form1_Load(System.Object sender, System.EventArgs e)
    {
        
        this.Text = "LM35 en PC";
        this.BackColor = Color.Black;
        Label1.Text = "00";
        Label2.Text = "Cº";
        Label3.Text = "Power by LM35";
        Label1.ForeColor = Color.Blue;
        Label2.ForeColor = Color.Blue;
        Label3.ForeColor = Color.White;
            
        Label4.ForeColor = Color.White;
    }
    
    public string ReceiveSerialData()
    {
        
        using (IO.Ports.SerialPort com1 = My.Computer.Ports.OpenSerialPort("COM1")) {
            com1.Write("D");
            rcbuf = com1.ReadByte;
            Label4.Text = rcbuf;
            // If rcbuf = "-" Then
            //Label1.Text = textout
            //Else
            //textout += rcbuf
            //End If
            
            
            if (textout > 24) {
                Label1.ForeColor = Color.Red;
            }
            else {
                if (textout > 15) {
                    Label1.ForeColor = Color.Green;
                }
                else {
                    Label1.ForeColor = Color.Blue;
                }
            }
            Label2.ForeColor = Label1.ForeColor;
        }
    }
    
}
Gracias a este enlace.
http://www.developerfusion.com/tools/convert/vb-to-csharp/

¿Cómo envías los datos del LM35 al PC? ¿Por puerto serie?

Saludo.
 
Última edición:
Muchismas gracias Meta, ya me voy a ver si puedo hacer andar el programa. El problema con lo del sensor por I2C es que en la zona en la que vivo no consigo. Te pido disculpas por lo del programa es que cuando no es muy extenso no suelo ponerle comentarios. Estube leyendo algo sobre un manual que estabas haciendo sobre C, me interesa saber mas sobre ese lenguage ya que mi experiencia en el mismo es prácticamente nula, si me podrias ayudar a aprender mas sobre este lenguaje estare muy agradecido.
 
Buenas:

Ya veo la razón.

¿Eres capáz de enviar algo al puerto serie desde el PIC?

El manual del Visual C# he explicado paso a paso como hacerlo.

Ver manual puerto serie

Código:
[COLOR=Blue]private[/COLOR] [COLOR=Blue]void[/COLOR] button_b_Click([COLOR=Blue]object[/COLOR] sender, EventArgs e)
        {
            [COLOR=Blue]byte[/COLOR][] mBuffer = [COLOR=Blue]new[/COLOR] [COLOR=Blue]byte[/COLOR][11];
            mBuffer[0] = 0x48; [COLOR=Green]//ASCII letra "H".[/COLOR]
            mBuffer[0] = 0x6F; [COLOR=Green]//ASCII letra "o".[/COLOR]
            mBuffer[0] = 0x6C; [COLOR=Green]//ASCII letra "l".[/COLOR]
            mBuffer[0] = 0x61; [COLOR=Green]//ASCII letra "a".[/COLOR]
            mBuffer[0] = 0x20; [COLOR=Green]//ASCII letra " ".[/COLOR]
            mBuffer[0] = 0x6D; [COLOR=Green]//ASCII letra "m".[/COLOR]
            mBuffer[0] = 0x75; [COLOR=Green]//ASCII letra "u".[/COLOR]
            mBuffer[0] = 0x6E; [COLOR=Green]//ASCII letra "n".[/COLOR]
            mBuffer[0] = 0x64; [COLOR=Green]//ASCII letra "d".[/COLOR]
            mBuffer[0] = 0x6F; [COLOR=Green]//ASCII letra "o".[/COLOR]
            mBuffer[0] = 0x2E; [COLOR=Green]//ASCII letra ".".[/COLOR]
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

Ya verás que con él aprenderás. Si te gusta más Visual C++/Visual Basic .net tambien lo tengo por ahí ese manual.
 
Nuevamente muchisimas gracias. en cuanto termine de leer el manual te digo. Ahora mismo estoy instalando el visual C# (la ultima ves que reformateee no lo volvi a instalar).
 
Atrás
Arriba