Puerto serie en VB

Estoy intentando enviar datos desde un programa de VB al Arduino y no lo consigo. La idea es enviar valores numericos desde 0 a 99999.
Los datos los intento enviar por el puerto serie. Y lo enviado no lo reconoce el Arduino.

Muestra el código que estás usando para que podamos darte alguna idea.

Hace mucho que no uso VB, pero recuerdo que debías incluir un control Comm en tu proyecto, y a partir de ahí establecer propiedades, etc.

Pon el código, mensajes de error, etc.

Bye.

El codigo de VB que estoy usando en la prueba es este:

Dim cen, res, dec, uni As Integer

num = Text1.Text

cen = Fix(num / 100)
res = (num / 100 - cen) * 100
dec = Fix(res / 10)
uni = ((res / 10 - dec) * 10)

Text2.Text = cen & " " & dec & " " & uni

MSComm1.Output = cen
MSComm1.Output = dec
MSComm1.Output = uni

La idea era descomponer el numero para enviarlo.

Este es el codigo de Arduino:

int pingNumber = 0;
int lastRead = 0;
int preLastRead = 0;
boolean yetRead = true;

// Function to convert received bytes to decimal numbers
void readSerialData () {
pingNumber = 0;
if(Serial.available()) {
yetRead = false;
while (Serial.available()){
preLastRead = lastRead;
lastRead = Serial.read()-48;
pingNumber = pingNumber*10+lastRead;
Serial.println(pingNumber);
}
pingNumber = (pingNumber-lastRead)/10;
pingNumber = (pingNumber-preLastRead)/10;

}
}

Hola Dakar.

Te paso una función que utilicé hace tiempo para leer una balanza de peso por puerto serie:

Private Sub AbrirPuerto()
        Dim DatosEnlace As String
        Dim NumeroPuerto As Integer

        DatosEnlace = TxtBaud.Text & "," & TxtParidad.Text & "," & TxtBitsDatos.Text & "," & TxtBitStop.Text
            REM Ej: "9600,n,8,1"

        NumeroPuerto = 1

            rem Si el puerto no está abierto, lo abro.
        If Not AxMSComm2.PortOpen Then
            TextBox1.Text = TextBox1.Text & vbCrLf & "Abriendo Puerto " & NumeroPuerto & " Formato: " & DatosEnlace
            AxMSComm2.Settings = DatosEnlace
            AxMSComm2.PortOpen = True
        End If
        If AxMSComm2.PortOpen Then
            TextBox1.Text = "Puerto abierto ok"
        Else
            TextBox1.Text = "Error al abrir el puerto"
        End If

    End Sub


   Private Sub CerrarPuerto()
        If AxMSComm2.PortOpen Then
            AxMSComm2.PortOpen = False
        End If
    End Sub

Es decir: tienes que establecer los valores de configuración del puerto serie y antes de enviar datos, hay que abrirlo como si fuera un archivo.

Para leer o escribir datos hay que usar los métodos Input, Output:

AxMSComm2.Output = "datos enviados puerto serie..."

Espero que te sirva.

Saludos, Pakoff.

¿pero no hay que crear primero el objeto AxMSComm2 antes de poder utilizarlo?

Un saludo,

Efectivamente.

Antes de nada se genera un proyecto. A ese proyecto se le van añadiendo formularios y dentro del formulario se coloca el objeto AxMSComm. En Visual Studio se hace arrastrando y soltando dentro del formulario. Al ser un objeto de comunicaciones, no implica que se visualice nada de él en el formulario, como lo haría un botón o un TextBox.

No puedo explicarlo paso a paso porque hace tiempo que no desarrollo en Vb. Solamente a veces hago algo en el Visual Basic de Excel.

Saludos. Pakoff.

Hola Pakoff,

Muchas gracias por la ayuda.
Hay algo que no me queda claro. Al coloca el objeto AxMSComm, en sus propiedades ya tengo configurado el puerto, y tengo un boton para abrir el puerto.
El probleme esta en que si envia datos, pero no los reconoce bien.
Segun he visto solo se pueden enviar byte y en caranteres ASCII.

Así es como lo tienes en tu ejemplo no?

Preparas una cadena Centenas, decenas y unidades y envías la cadena.

De todas formas, échale un vistazo al código de esta página que comunica arduino con VB.

Bye, Pakoff.