Pages: [1] 2 3   Go Down
Author Topic: Serial data to Visual Basic, Visual C++, Java  (Read 7303 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 50
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

  Hello all,

   I'm interested in sending serial data from an arduino to my PC and have it displayed on either VB,VC++ or Java program. I'm not sure which one would be easiest to do. I would like to be able to make a simple program rather quickly ... nothing too fancy.
I just need to display a reading from one sensor.
 

thanks,
Phil
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 38
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

You might try Processing at http://processing.org/. It uses much the same IDE as the Arduino and is similar in many other respects. There are many examples on the Forum and elsewhere to provide the capability you are seeking.
Logged

Tønsberg, Norway
Offline Offline
Full Member
***
Karma: 0
Posts: 148
Arduino rocks hard!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

If you use Visual Basic, communicating with the Arduino is pretty simple stuff.

1. Add the object Microsoft Comm Control 6.0 to your project, and put it on the form.

2. Set the correct properties for MSComm1 (baud-rate, com-port, etc.) This depends on your Arduino-code and your computer setup.

3. Add the following code to the Form_Load() event (double click the form):
Code:
Private Sub Form_Load()
MSComm1.PortOpen = True
End Sub

4. Add a Timer to your form (the small clock-symbol-thingie) and set it's interval to something like 100ms (Interval: 100)

5. Add the following code to the timer (double click the timer-object on the form)
Code:
Private Sub Timer1_Timer()
If MSComm1.InBufferCount > 0 Then
    Dim buf as string
    buf = MSComm1.Input
End If
End Sub

6. To send data back to the Arduino, you place the following code in your program (in a button_Click() event or something like that)
Code:
MSComm1.Output "whatever you want to send"
Logged

Dreaming of extra senses through sensory substitution/agumentation since.. well, for ever.. =P
Going to automate my home, just gotta find the perfect DIY solution first!

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 50
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

   Thanks guys for the help. I think for now I'm going to start with Processing. It seems to be a lot easier to work with. I would like to play around with some VB & C++ , but I don't think I'm ready for it at the moment.

  Thanks for the code Plastbox. That was very helpful. The only thing is ... I don't have VB 6.0 .. I have the free VB 2008 Express. I don't think it has MS Comm. It does have SerialPort.



thanks,
Phil
Logged

Tønsberg, Norway
Offline Offline
Full Member
***
Karma: 0
Posts: 148
Arduino rocks hard!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Aaah, ok. I just assumed VB6 as it is by far the most easy windows environment and language to get started with. Also, people whine constantly about the performance and such of programs made with VB6. Up yours, people! When one is talking about small utility-applications and stuff like that, performance doesn't even come into play.  smiley-wink
Logged

Dreaming of extra senses through sensory substitution/agumentation since.. well, for ever.. =P
Going to automate my home, just gotta find the perfect DIY solution first!

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 50
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 Yeah ... I don't know why people complain about VB. I don't care about performance differences. It's not like I'm programming a 3D shooter or anything. Besides... I was reading that most programmers aren't even good enough to code in C++ to make it any faster than if it were in VB. I definitely know that I'm not good enough.

I'm more of a hardware guy than a programmer. I would just like to make some quick and easy windows apps that are functional.



Phil
Logged

Copenhagen / Denmark
Offline Offline
Edison Member
*
Karma: 6
Posts: 2360
Do it !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

The newer versions of VB ( the .net versions) are not quite as easy to program to use the serial port. But it's possible.

I have some kode that recieves data from Arduino if anybody is interested.

It's a very simple app.

And by the way, in the new versions there is no speed penalty for using VB, it's compiled to the same intermediary language as the other .net languages.
« Last Edit: May 01, 2008, 10:35:32 am by MikMo » Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 50
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

  Hello MikMo,

  Please do post the code. I would like to see it.


thanks,
Phil
Logged

Copenhagen / Denmark
Offline Offline
Edison Member
*
Karma: 6
Posts: 2360
Do it !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

I just realized the the VB program is on a computer that i stuffed under my bed to make room for a major party.

I will have it back in place again in a couple of days.  My code is based on a small VB sample app. i found somewhere on the internet. It was something like a small two way chat program using a serial line to ceooent two PC's.
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 50
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

  Cool


thanks,
Phil
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 1
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey I think I found the source code for the chat VB application.

Pasting it:

Visual Basic 2005 band up – Chat over serial port

Imports System
Imports System.IO.Ports
Imports System.Threading

Public Class PortChat
    Shared _continue As Boolean
    Shared _serialPort As SerialPort

    Public Shared Sub Main()
        Dim name As String
        Dim message As String
        Dim sComparer As StringComparer = StringComparer.OrdinalIgnoreCase
        Dim readThread As Thread = New Thread(AddressOf Read)

        ' Create a new SerialPort object with default settings.
        _serialPort = New SerialPort()

        ' Allow the user to set the appropriate properties.
        _serialPort.PortName = SetPortName(_serialPort.PortName)
        _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate)
        _serialPort.Parity = SetPortParity(_serialPort.Parity)
        _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits)
        _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits)
        _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake)

        ' Set the read/write timeouts
        _serialPort.ReadTimeout = 500
        _serialPort.WriteTimeout = 500

        _serialPort.Open()
        _continue = True
        readThread.Start()

        Console.Write("Name: ")
        name = Console.ReadLine()

        Console.WriteLine("Type QUIT to exit")

        While (_continue)
            message = Console.ReadLine()

            If sComparer.Equals("quit", message) Then
                _continue = False
            Else
                _serialPort.WriteLine( _
                    String.Format("<{0}>: {1}", name, message))
            End If
        end while

        readThread.Join()
        _serialPort.Close()
    End Sub

    Public Shared Sub Read()
        While (_continue)
            Try
                Dim message As String = _serialPort.ReadLine()
                Console.WriteLine(message)
            Catch ex As TimeoutException
                ' Do nothing
            End Try
        End While
    End Sub

    Public Shared Function SetPortName(ByVal defaultPortName As String) As String
        Dim newPortName As String

        Console.WriteLine("Available Ports:")
        Dim s As String
        For Each s In SerialPort.GetPortNames()
            Console.WriteLine("   {0}", s)
        Next s

        Console.Write("COM port({0}): ", defaultPortName)
        newPortName = Console.ReadLine()

        If newPortName = "" Then
            newPortName = defaultPortName
        End If
        Return newPortName
    End Function

    Public Shared Function SetPortBaudRate(ByVal defaultPortBaudRate As Integer) As Integer
        Dim newBaudRate As String

        Console.Write("Baud Rate({0}): ", defaultPortBaudRate)
        newBaudRate = Console.ReadLine()

        If newBaudRate = "" Then
            newBaudRate = defaultPortBaudRate.ToString()
        End If

        Return Integer.Parse(newBaudRate)
    End Function

    Public Shared Function SetPortParity(ByVal defaultPortParity As Parity) As Parity
        Dim newParity As String

        Console.WriteLine("Available Parity options:")
        Dim s As String
        For Each s In [Enum].GetNames(GetType(Parity))
            Console.WriteLine("   {0}", s)
        Next s

        Console.Write("Parity({0}):", defaultPortParity.ToString())
        newparity = Console.ReadLine()

        If newparity = "" Then
            newparity = defaultPortParity.ToString()
        End If

        Return CType([Enum].Parse(GetType(Parity), newParity), Parity)
    End Function

    Public Shared Function SetPortDataBits(ByVal defaultPortDataBits As Integer) As Integer
        Dim newDataBits As String

        Console.Write("Data Bits({0}): ", defaultPortDataBits)
        newDataBits = Console.ReadLine()

        If newDataBits = "" Then
            newDataBits = defaultPortDataBits.ToString()
        End If

        Return Integer.Parse(newDataBits)
    End Function

    Public Shared Function SetPortStopBits(ByVal defaultPortStopBits As StopBits) As StopBits
        Dim newStopBits As String

        Console.WriteLine("Available Stop Bits options:")
        Dim s As String
        For Each s In [Enum].GetNames(GetType(StopBits))
            Console.WriteLine("   {0}", s)
        Next s

        Console.Write("Stop Bits({0}):", defaultPortStopBits.ToString())
        newStopBits = Console.ReadLine()

        If newStopBits = "" Then
            newStopBits = defaultPortStopBits.ToString()
        End If

        Return CType([Enum].Parse(GetType(StopBits), newStopBits), StopBits)
    End Function

    Public Shared Function SetPortHandshake(ByVal defaultPortHandshake As Handshake) As Handshake
        Dim newHandshake As String

        Console.WriteLine("Available Handshake options:")
        Dim s As String
        For Each s In [Enum].GetNames(GetType(Handshake))
            Console.WriteLine("   {0}", s)
        Next s

        Console.Write("Stop Bits({0}):", defaultPortHandshake.ToString())
        newHandshake = Console.ReadLine()

        If newHandshake = "" Then
            newHandshake = defaultPortHandshake.ToString()
        End If

        Return CType([Enum].Parse(GetType(Handshake), newHandshake), Handshake)
    End Function
End Class
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 50
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

  Thanks auerlg.

   I'm messing around with Processing right now ... not as easy as I initially thought it would be. I figured out last night how to print my data to a window using text();   ... still trying to figure out how to refresh it without overlapping the previous value.

  I guess I should still look into using VB. Is that code for the 2 way chat program? If so ... how easy would it be for me to use this for one-way communication (Arduino to VB) ?


thanks,
Phil
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 3
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello All.

Are there anybody that has a VB 2008 Express program running to control the Arduino.
maby someone can make a toturical on switching a led on and off from VB,
and reading a bottom press in VB from Arduino input.

Just to get us beginners started.

Regards
    Brian  
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 15
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I don't know if you are interested, but I adapted some serial C++ class for its use under linux.

The code is posted in this website https://webfiles.uci.edu/cagell/news/news.htm, along with some other useful codes.


Let me know if it helped!!!


Dolphin
Logged

Copenhagen / Denmark
Offline Offline
Edison Member
*
Karma: 6
Posts: 2360
Do it !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

sorry for the delay. i just got sidetracked by work and new grilfriend :-)

Here's a link to my VB projekt. It's only one way Arduino -> VB, but i should be a piece of cake to also send the other way.

If anbody modify it please post here so we can share our VB <-> Arduino experiences

EDIT :

Wouldn't it be nice to make some kind of "generalised" VB class or component to interface with Arduino, mabe even some kind of dataexchange protocol on top of it ?
« Last Edit: May 16, 2008, 09:51:35 am by MikMo » Logged

Pages: [1] 2 3   Go Up
Jump to: