VB Help


Closed Thread
Results 1 to 36 of 36

Thread: VB Help

Hybrid View

  1. #1
    Join Date
    Aug 2010
    Location
    Maryland, USA
    Posts
    869

    Default VB Help

    Anybody know and want to help me through som VB express issues?

    In a nut shell, the problem is this:
    I know how to make something happen when I push a button. But how to create a "main loop"?

    I have a small app that when I press the button, I can get 18 bytes of data from my PIC. But I need to get the data all the time, not just on a button press. Then if I press the stop button, well of course it stops.

    this is what I think in the main:
    Code:
    do while getdata = 1
       get the data from the com port
       put the data in the text boxes
    loop
    Then my get data button would be :
    Code:
    open serial port
    getdata = 1
    stop button:
    Code:
    close serial port
    getdata = 0
    Of course there is more to the code then this, but I am stuck on not understanding the structure of things. Happy to post my code, of course I don't even know if the code I will post is all the code. I know where all I have written is.
    I realize I should maybe post in a VB forum, but I know there are folks here that may be able to help, and I like it here better.
    -Bert

    The glass is not half full or half empty, Its twice as big as needed for the job!

    http://foamcasualty.com/ - Warbird R/C scratch building with foam!

  2. #2
    Join Date
    Aug 2008
    Location
    Portugal
    Posts
    240


    Did you find this post helpful? Yes | No

    Default Re: VB Help

    HI;

    You want to pull the data from the serial Port?
    So, you should use the serial port receive event, like this one;

    Code:
    Private Sub DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
            Dim recepcao As String
     ' do what you want you the recepcao variable
    The total code, should be something like this;

    First you need to add the serilport class to your project.
    Code:
    Public Class Form1
        Dim WithEvents SerialPort1 As New IO.Ports.SerialPort
    Then, at Form Load, you need to configure and open your SerialPort;
    Code:
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            SerialPort1.PortName = "COM1"
            SerialPort1.Parity = IO.Ports.Parity.None
            SerialPort1.BaudRate = 9600
            SerialPort1.DataBits = 8
            SerialPort1.StopBits = 1
            SerialPort1.Open()
        End Sub
    This handles the recetion from the buffer of the com port, and then i have a If statment to do the actions that need to be perfomed acording with the received data.
    Code:
     Private Sub DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
            Dim recepcao As String
    
            recepcao = SerialPort1.ReadExisting
    
            If recepcao = "%TE" Then
                GetCursorPos(rect)
                SetCursorPos(rect.X - 1, rect.Y)
            End IF
    After you have this working, you sould put some "Try ...Catch" code, to handle the erros!

    Hope it can help you!
    Thanks and Regards;
    Gadelhas

  3. #3
    Join Date
    Aug 2010
    Location
    Maryland, USA
    Posts
    869


    Did you find this post helpful? Yes | No

    Default Re: VB Help

    Hi Gadelhas, Thanks for your help. Let me assure you first I am completely new to this. Just started learning it yesterday.

    I understand your examples, but I am still confused.

    I have it reading the serial port now. I have a button set up that when I press it, it sends a char to the pic, and the pic responds with 18 bytes. This seems to work good, everytime I press the button.

    What I want to do is set up a timer(I think I can do that based on examples found surfing) to "press the button for me" every 100mS or so.

    So the "form1_load" section is where the start of the program is?

    I really don't understand how the code "flows". All the beginner tutorals seem to be the same thing: add a button, add a textbox. Add code in the button event to put text in the text box.
    None explain how the overall code is executed. Please see that I think in terms of coding a PIC. ie: there is a main loop, inside the loop we check things and gosub or goto different parts of the code, then we get back to the main and return to the beginning. we may even have interrupts that will stop what is happening and run some other code, then return to what it was doing before.

    So to me all the button events are like the sub-routines, that get called when we press the button. but where do they return to?

    If I used the examples you gave, will the "code" just hang out in lala land until a byte is received?

    Am I thinking too hard?
    -Bert

    The glass is not half full or half empty, Its twice as big as needed for the job!

    http://foamcasualty.com/ - Warbird R/C scratch building with foam!

  4. #4
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default Re: VB Help

    Yup, in VB, everything is "Event driven", so the software Wait 'till the next event, process the event... and then take a break before the next event.

    Should you have any further problem, post your whole project/solution here. I can definitely help on that.

    Check the SerialPort settings, you can trigger the SerialPort Event after having receive a certain amount of incoming bytes.
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  5. #5
    Join Date
    Aug 2010
    Location
    Maryland, USA
    Posts
    869


    Did you find this post helpful? Yes | No

    Default Re: VB Help

    I assume this is all of it. If not I don't know where to find it.
    Code:
    PublicClass Form1
    Dim getdata AsByte
     
     
    PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim namearray() AsString
    namearray = IO.Ports.SerialPort.GetPortNames
    If namearray(0) = ""Then
    TextBox1.Text = "none found!"
    Else
    'ComboBox1.Text = namearray(0)
    SerialPort1.PortName = namearray(0)
    TextBox1.Text = SerialPort1.PortName
    EndIf
     
    EndSub
    PrivateSub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Dim i AsInteger
    Dim datain AsByte
    Dim data(20) AsShort
    If getdata = 0 Then
    SerialPort1.Open()
    getdata = 1
    EndIf
    'Do While getdata <> 0
    SerialPort1.Write("k")
    For i = 0 To 17
    datain = SerialPort1.ReadByte()
    data(i) = datain
    Next
    gxhb.Text = (data(0) * 256) + data(1)
    'gxlb.Text = Hex(data(1))
    gyhb.Text = (data(2) * 256) + data(3)
    'gylb.Text = Hex(data(3))
    gzhb.Text = (data(4) * 256) + data(5)
    'gzlb.Text = Hex(data(5))
    axhb.Text = (data(6) * 256) + data(7)
    'axlb.Text = Hex(data(7))
    ayhb.Text = (data(8) * 256) + data(9)
    'aylb.Text = Hex(data(9))
    azhb.Text = (data(10) * 256) + data(11)
    'azlb.Text = Hex(data(11))
    cxhb.Text = (data(12) * 256) + data(13)
    'cxlb.Text = Hex(data(13))
    cyhb.Text = (data(14) * 256) + data(15)
    'cylb.Text = Hex(data(15))
    czhb.Text = (data(16) * 256) + data(17)
    'czlb.Text = (data(17))
    'Loop
     
     
    EndSub
    PrivateSub Panel2_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs)
    EndSub
    PrivateSub czlb_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles czlb.TextChanged
    EndSub
    PrivateSub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    getdata = 0
    SerialPort1.Close()
    EndSub
    PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
    'Do While 0 < 1
    If getdata = 1 Then
    TextBox1.Text = "sub ran"
    Else
    TextBox1.Text = "sub else ran"
    EndIf
    'Loop
    EndSub
    EndClass

    -Bert

    The glass is not half full or half empty, Its twice as big as needed for the job!

    http://foamcasualty.com/ - Warbird R/C scratch building with foam!

  6. #6
    Join Date
    Aug 2010
    Location
    Maryland, USA
    Posts
    869


    Did you find this post helpful? Yes | No

    Default Re: VB Help

    Having just read walters post, it seems to me I need a timer, that when it fires it runs the code now in the button_2 press. It would run the code everytime the timer condition is met? Then the button code needs a check for if getdata is 1 or 0. so really the code is inside an if_then.

    Then the timer is my event.

    BTW, if the code I posted makes no sense, my appalogies.

    How to setup the timer for every 50 ms?
    -Bert

    The glass is not half full or half empty, Its twice as big as needed for the job!

    http://foamcasualty.com/ - Warbird R/C scratch building with foam!

  7. #7
    Join Date
    Feb 2006
    Location
    Gilroy, CA
    Posts
    1,530


    Did you find this post helpful? Yes | No

    Default Re: VB Help

    Like Mister_e says, Visual Basic is event driven. You have to think a lot differently when using visual basic. Everything needs an event to fire. A button must be pressed, the comm port must have received new data, text must have been typed into the text box, a timer must have timed out, etc. On each one of those events, code can be written to do math, change characters, do lookups, store data into a database ... whatever.

    One way to think about it might be to compare it to programming in picbasic, but solely using interrupts. Each event is handled by the interrupt handler for that event. Like Steve mentions, until an event happens, VB just waits.

    Attached is a comm port program that acts on comm port data received. http://www.innovatic.dk/knowledg/Ser.../SerialCOM.htm
    Attached Files Attached Files
    Last edited by ScaleRobotics; - 30th May 2011 at 16:18.

  8. #8
    Join Date
    Dec 2005
    Posts
    1,073


    Did you find this post helpful? Yes | No

    Default Re: VB Help

    Quote Originally Posted by cncmachineguy View Post
    Anybody know and want to help me through som VB express issues?
    I don't have time to help with coding but my advice is to pay $100 for PureBasic which runs on Windows, Linux & OSX and creates small, fast, standalone executables.

  9. #9
    Join Date
    Aug 2010
    Location
    Maryland, USA
    Posts
    869


    Did you find this post helpful? Yes | No

    Default Re: VB Help

    Quote Originally Posted by dhouston View Post
    I don't have time to help with coding
    Are you sure?
    awaiting the long-promised Tibbo EM500/GA1000 firmware) and need something to do this afternoon
    but my advice is to pay $100 for PureBasic which runs on Windows, Linux & OSX and creates small, fast, standalone executables.
    Looked at it, also real basic and liberty basic. Nothing wrong with any of them and I have no issue paying for the software. But to get started in windoze apps, I figured I may as well use windoze software. For this adventure I have no need for cross platform deployment.
    -Bert

    The glass is not half full or half empty, Its twice as big as needed for the job!

    http://foamcasualty.com/ - Warbird R/C scratch building with foam!

  10. #10
    Join Date
    Aug 2010
    Location
    Maryland, USA
    Posts
    869


    Did you find this post helpful? Yes | No

    Default Re: VB Help

    You could use the timer
    Well no really I can't just yet. Haven't figured out how - LOL

    @Walter, what you suggest makes the Pic the master and the PC the slave. I guess that works just fine. Although I suppose if I put some code in the pic to be on continusely or to be polled, that would still let the PC be in charge. Then the pic can just watch for the "stop sending data" command.
    -Bert

    The glass is not half full or half empty, Its twice as big as needed for the job!

    http://foamcasualty.com/ - Warbird R/C scratch building with foam!

  11. #11
    Join Date
    Dec 2005
    Posts
    1,073


    Did you find this post helpful? Yes | No

    Default Re: VB Help

    Quote Originally Posted by cncmachineguy View Post
    Are you sure?.
    Yeah - while patiently waiting for the long-promised Tibbo EM500/GA1000 firmware, I'm filling the time adding one more ConnectOne WiFi module to the Amicus18/Arduino/Xino shield. Any of three modules - 2 WiFi, 1 NoFi can be plugged into it. (I hope I have room for the EEPROM mackrackit's going to fill with AT codes.)
    Last edited by dhouston; - 30th May 2011 at 18:26.

  12. #12
    Join Date
    Aug 2010
    Location
    Maryland, USA
    Posts
    869


    Did you find this post helpful? Yes | No

    Default Re: VB Help

    Dave, did you check your spam folder? Sometimes when I am long awaiting stuff, I find it went there. Hahahaha.

    Group- I feel like my interpretation of Walters post is prolly the best overall solution, but my root problem remains.

    How to setup a timer trigger? Maybe it is in the control toolbox? I will check there next.
    -Bert

    The glass is not half full or half empty, Its twice as big as needed for the job!

    http://foamcasualty.com/ - Warbird R/C scratch building with foam!

  13. #13
    Join Date
    May 2007
    Posts
    604


    Did you find this post helpful? Yes | No

    Default Re: VB Help

    Quote Originally Posted by cncmachineguy View Post
    ....How to setup a timer trigger? Maybe it is in the control toolbox? I will check there next.
    Select the TIMER control from the toolbox and drag it into your project. Click on the control to display its properties. Enable the TIMER and set its interval to whatever you want (in mS) - see below.

    Name:  TEST-6H.jpg
Views: 1046
Size:  27.6 KB

    Then code whatever you want to happen whenever a trigger occurs as in the example below.

    Code:
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            count = Val(Label1.Text) * 100
            count = count + 1
            HScrollBar1.Value = count
            Label1.Text = Format$(count / 100, "#0.00")
            NumericUpDown1.Value = count / 100
    
            count = Val(Label3.Text) * 100
            count = count + 1
            HScrollBar2.Value = count
            Label3.Text = Format$(count / 100, "#0.00")
        End Sub
    Why pay for overpriced toys when you can have
    professional grade tools for FREE!!!

  14. #14
    Join Date
    Feb 2006
    Location
    Gilroy, CA
    Posts
    1,530


    Did you find this post helpful? Yes | No

    Default Re: VB Help

    You could use the timer, but the best way would be to use a comm port event. That way you are only doing something when data arrives. Its been years (and years) since I wrote a VB program with serial port, so I am sure others can do better than my try at answering this. But here is something I found for a newer version of VB.

    http://www.me.umn.edu/courses/me2011...al-port-vb.pdf Toward the end, it mentions why things get a little complicated: "For receiving data at unexpected times, use the DataReceived event. This is a bit tricky
    because it runs in a different thread and requires a handler. (Virtual Serial Port Cookbook,
    Chapter 9 for details.)" Of course it is in chapter 9. Chapters 1 - 6 are free: http://www.smileymicros.com/index.ph...age&PAGE_id=50
    Attached Images Attached Images

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts