LB Booster
« Com port code works in lb but not lbb »

Welcome Guest. Please Login or Register.
Apr 1st, 2018, 05:11am



ATTENTION MEMBERS: Conforums will be closing it doors and discontinuing its service on April 15, 2018.
We apologize Conforums does not have any export functions to migrate data.
Ad-Free has been deactivated. Outstanding Ad-Free credits will be reimbursed to respective payment methods.

Thank you Conforums members.
Speed up Liberty BASIC programs by up to ten times!
Compile Liberty BASIC programs to compact, standalone executables!
Overcome many of Liberty BASIC's bugs and limitations!
LB Booster Resources
LB Booster documentation
LB Booster Home Page
LB Booster technical Wiki
Just BASIC forum
BBC BASIC Home Page
Liberty BASIC forum (the original)

« Previous Topic | Next Topic »
Pages: 1  Notify Send Topic Print
 thread  Author  Topic: Com port code works in lb but not lbb  (Read 1102 times)
Rod
Full Member
ImageImageImage


member is offline

Avatar




PM

Gender: Male
Posts: 110
xx Re: Com port code works in lb but not lbb
« Reply #8 on: Apr 20th, 2015, 08:52am »

OK, it is a simple speed issue and program structure fault.

Typically you will open a serial port once, give it a little time to establish and then use it. A serial port can take a good few hundred milliseconds to establish. Once completely finished close it once.

My test code gave the port 500ms before attempting to use it.

So that's all that is required to fix the problem. In this code I open the port first thing, by the time the user gets round to pressing keys the port is established and responds without the need of any handshaking.

Code:
port=4 'your com port number
'Open the com port
open "COM" ; port ; ":9600,n,8,1" for random as #ArduinoCOMPort

dim  pins$(100)


 'Populate pin list
 for x = 0 to 13
    pins$(x) = str$(x)
 next x


    'nomainwin
    WindowWidth = 360
    WindowHeight = 445
    UpperLeftX=int((DisplayWidth-WindowWidth)/2)
    UpperLeftY=int((DisplayHeight-WindowHeight)/2)

    listbox #main.PinSelector, pins$(, [listbox1DoubleClick],   10,  82, 130, 320
    statictext #main.statictext2, "Pin Selector",  10,  62, 130,  20

    textbox #main.ValToSend, 165,  32, 170,  25
    statictext #main.statictext4, "Value To Send", 165,  12, 170,  20
    statictext #main.statictext5, "Return Value", 165,  62, 175,  20
    textbox #main.ReturnValue, 165,  82, 170,  25
    button #main.button7,"Set Pin High/Low Status",[Set.Pin], UL, 165, 117, 170,  25
    button #main.button8,"Get Pin High/Low Status",[Get.Pin], UL, 165, 152, 170,  25
    button #main.button9,"PWM Output (Servos)",[PWM.Out], UL, 165, 187, 170,  25
    button #main.button10,"PWM Input",[PWM.In], UL, 165, 222, 170,  25
    statictext #main.statictext11, "Com Port Number",  10,  12, 145,  20
    textbox #main.ComPortNo,  10,  32, 130,  25

    open "LB Ultra Simple Arduino Demo" for dialog as #main
    print #main, "trapclose [quit.main]"
    wait




[Set.Pin]
    gosub [Get.The.Selctions.And.Textboxes.From.Main.Win]
    return.value = AD.Set(Com.port.Selection, Pin.Selection, Val.To.Send)
    print #main.ReturnValue, return.value
    wait


[Get.Pin]
    gosub [Get.The.Selctions.And.Textboxes.From.Main.Win]
    return.value = AD.Get(Com.port.Selection, Pin.Selection)
    print #main.ReturnValue, return.value
    wait




[PWM.Out]
    gosub [Get.The.Selctions.And.Textboxes.From.Main.Win]
    return.value = AD.PWM.Out(Com.port.Selection, Pin.Selection, Val.To.Send)
    print #main.ReturnValue, return.value
    wait



[PWM.In]
    gosub [Get.The.Selctions.And.Textboxes.From.Main.Win]
    return.value = AD.PWM.In(Com.port.Selection, Pin.Selection)
    print #main.ReturnValue, return.value
    wait



[quit.main]
    close #main
    close #ArduinoCOMPort
    end





[Get.The.Selctions.And.Textboxes.From.Main.Win]
    print #main.ValToSend, "!contents? Val.To.Send";
    print #main.ComPortNo, "!contents? Com.port.Selection";
    print #main.PinSelector, "selection? Pin.Selection"
    return








'Begin Arduino Code here -------------------------------------------------------
'These functions can be added to any program to provide arduini power input and output
'Descriptions for functions are in there comments


function AD.Set(com.port, PinNo, value)
'Set an Arduino pin high or low,
'Will return 1 one if successful, 0 if not
     AD.Set = val(AD.talk.to.device$(com.port,"set ";PinNo;" ";value))
end function


function AD.Get(com.port, PinNo)
'Will return the current state of the input pin
'1 for high, 0 for low
     AD.Get = val(AD.talk.to.device$(com.port,"get ";PinNo))
end function


function AD.PWM.Out(com.port, PinNo, value)
'Set the PWM output on the select pin to the value
'Will return a 1 for success and 0 for failure.
     AD.PWM.Out = val(AD.talk.to.device$(com.port,"pwm.out ";PinNo;" ";value))
end function


function AD.PWM.In(com.port, PinNo)
'Get the PWM input from the pin
'Will return a value of 0 to 1023
    AD.PWM.In = val(AD.talk.to.device$(com.port,"pwm.in ";PinNo))
end function












Function AD.talk.to.device$(port,msg$)
'Send a Message to the arduino and return the result sent back by the device
    if msg$ <> "" then

        'Send message to device
        print #ArduinoCOMPort, msg$
        'Wait until there is a carriage return
        while foundLF = 0
            while lof(#ArduinoCOMPort) > 0
                temp$ = input$(#ArduinoCOMPort, 1)
                buffer$ = buffer$ + temp$

                if temp$ = chr$(13) then
                    foundLF = 1
                    exit while
                end if
            wend
        wend

        'Place the returned text in to AD.talk.to.device$
        AD.talk.to.device$ = buffer$
    else
        Notice "Improper Message Received, Must contain a command"
    end if
End function

 
User IP Logged

Pages: 1  Notify Send Topic Print
« Previous Topic | Next Topic »


This forum powered for FREE by Conforums ©
Terms of Service | Privacy Policy | Conforums Support | Parental Controls