Reading Inputs from Arduino via Serial in VB.net

Hi All,

First time posting here..

I have spent many hours trying to research this subject, with some success.. some not. I have a Arduino UNO that I want to read the inputs from in Visual Basic for a Application I have written. Once I can get the serial data I can write the If statements etc. However I cant seem to get VB to recgonise the Inputs.

I have tried the likes of Firmata, which works in test application, however their VB.net source code comes up with errors when it tries to run.

I have also looked at writing this from scratch, using the Arduino to just write either '1' or '2' for the inputs for example, but not sure how to read this on Vb.net.

Can anyone help in regards to reading digita; inputs on firmata, it sounded much easier when I was researching firmata.

Or another way to read inputs via serial?

ALSO,

Is there a way of enabling Pullup on the inputs, as they are constantly floating at the minute. Seems a waste to use external pullps when there are some built in.

Thanks

Firmata is the wrong answer. That prevents the Arduino from initiating any action, like sending serial data.

Post the NON-Firmata code you have on the Arduino. A simple program like:

void setup()
{
   Serial.begin(115200);
}

void loop()
{
   Serial.println("One");
   delay(10000);
   Serial.println("Two");
   delay(30000);
}

will give you some serial data to read.

When you use pinMode(pin,INPUT) and then digitalWrite(pin,HIGH) it will activate the pull-up. You can then digitalRead(pin) to see if something has pulled it down.

Is a small program made with VB-2010 (that can send and read serial data) can intereste you?

If so, I can post it.

Regards

duino_nano:
Is a small program made with VB-2010 (that can send and read serial data) can intereste you?

If so, I can post it.

Regards

duino_nano if you don't mind, please post it. Someone may need about that
Just like me

thanks

simple terminal emulator using a VB Form with TextBox and SerialPort components

' terminal emulator - in Visual Studio VB

Public Class Form1
    ' set up delegate to display data received from serial port
    Private Delegate Sub SerialDelegate(ByVal Buffer As String)
    Private adre As New SerialDelegate(AddressOf DisplayData)
    ' key pressed on terminal textbox
    Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        SerialPort1.Write(e.KeyChar)
    End Sub
    ' character received from serial port
    Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        Dim ReceivedData As String = SerialPort1.ReadExisting()
        Me.Invoke(adre, ReceivedData)
    End Sub
    ' delegate to display string received
    Private Sub DisplayData(ByVal sdata As String)
        TextBox1.AppendText(sdata)
    End Sub
    ' on form load open serial port
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        SerialPort1.Open()
    End Sub

    Private Sub Form1_FormClosed(sender As System.Object, e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
        SerialPort1.Close()
    End Sub
End Class

this could be extended to have a menu to select COM port, set baudrate, etc

Hi,

Here is a small program in VB-2010 that can emulate a serial terminal.

You need 2 ComboBox, 2 Button, 1 GroupBox (with 1 TextBox and 1 Button), 1 RichTextBox and 1 TextBox.

Code Starts here ….
'Import Systems which we are gonna use in our code
Imports System
Imports System.ComponentModel
Imports System.Threading
Imports System.IO.Ports

'frmMain is the name of our form ….
'Here starts our main form code …..
Public Class frmMain
    Dim myPort As Array
    Delegate Sub SetTextCallback(ByVal [text] As String)

    'Page Load Code Starts Here….
    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        myPort = IO.Ports.SerialPort.GetPortNames()
        cmbBaud.Items.Add(9600)
        cmbBaud.Items.Add(19200)
        cmbBaud.Items.Add(38400)
        cmbBaud.Items.Add(57600)
        cmbBaud.Items.Add(115200)

        For i = 0 To UBound(myPort)
            cmbPort.Items.Add(myPort(i))
        Next

        cmbPort.Text = cmbPort.Items.Item(0)
        cmbBaud.Text = cmbBaud.Items.Item(0)
        btnDisconnect.Enabled = False

    End Sub
    'Page Load Code Ends Here ….

    'Connect Button Code Starts Here ….
    Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
        SerialPort1.PortName = cmbPort.Text
        SerialPort1.BaudRate = cmbBaud.Text
        SerialPort1.Parity = IO.Ports.Parity.None
        SerialPort1.StopBits = IO.Ports.StopBits.One
        SerialPort1.DataBits = 8
        SerialPort1.Open()
        btnConnect.Enabled = False
        btnDisconnect.Enabled = True
    End Sub
    'Connect Button Code Ends Here ….

    'Disconnect Button Code Starts Here ….
    Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click
        SerialPort1.Close()
        btnConnect.Enabled = True
        btnDisconnect.Enabled = False
    End Sub
    'Disconnect Button Code Ends Here ….

    'Send Button Code Starts Here ….
    Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
        SerialPort1.Write(txtTransmit.Text)
    End Sub
    'Send Button Code Ends Here ….

    'Serial Port Receiving Code Starts Here ….
    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        'TextBox1.Text = ""
        ReceivedText(SerialPort1.ReadExisting())

    End Sub
    'Serial Port Receiving Code Ends Here ….

    'Serial Port Receiving Code(Invoke) Starts Here ….
    Private Sub ReceivedText(ByVal [text] As String)
        
        If Me.rtbReceived.InvokeRequired Then
            Dim x As New SetTextCallback(AddressOf ReceivedText)
            Me.Invoke(x, New Object() {(text)})

        Else
            Me.rtbReceived.Text &= [text]

        End If
        TextBox1.Text = [text] 'Val(text)

    End Sub
    'Serial Port Receiving Code(Invoke) Ends Here ….

    'Com Port Change Warning Code Starts Here ….
    Private Sub cmbPort_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbPort.SelectedIndexChanged
        If SerialPort1.IsOpen = False Then
            SerialPort1.PortName = cmbPort.Text
        Else
            MsgBox("Valid only if port is Closed", vbCritical)
        End If
    End Sub
    'Com Port Change Warning Code Ends Here ….

    'Baud Rate Change Warning Code Starts Here ….
    Private Sub cmbBaud_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbBaud.SelectedIndexChanged
        If SerialPort1.IsOpen = False Then
            SerialPort1.BaudRate = cmbBaud.Text
        Else
            MsgBox("Valid only if port is Closed", vbCritical)
        End If
    End Sub
    'Baud Rate Change Warning Code Ends Here ….

End Class
'Whole Code Ends Here ….