Microsoft Small Basic

Program Listing: VBZ059
Initialise()

'==================================================
'MAIN LOOP
'==================================================

While ("True")
If (newData <> "") Then
tbData = Text.Append("Data received : "+newData+nl,Controls.GetTextBoxText(tb))
Controls.SetTextBoxText(tb,tbData)
newData = ""
EndIf
Program.Delay(10)
EndWhile

'==================================================
'SUBROUTINES
'==================================================

Sub Initialise
gw = 600
gh = 215
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
GraphicsWindow.Title = "Small Basic Arduino Interface"
GraphicsWindow.BackgroundColor = "Gray"
GraphicsWindow.BrushColor = "Black"
nl = Text.GetCharacter(10)

status = LDCommPort.OpenPort("COM3",9600)
LDCommPort.SetEncoding("Ascii")
LDCommPort.DataReceived = OnDataReceived

nButton = 8
spacing = (gw-30)/nButton
width = (gw-40)/nButton-10
For i = 1 To nButton
buttons[i] = Controls.AddButton("Action"+i,20+spacing*(i-1),175)
Controls.SetSize(buttons[i],width,25)
LDShapes.BrushColour(buttons[i],"SteelBlue")
EndFor
Controls.ButtonClicked = OnButtonClicked

clear = Controls.AddButton("Clear",20,20)
Controls.SetSize(clear,width,25)
LDShapes.BrushColour(clear,"SteelBlue")

send = Controls.AddButton("Send",20+spacing,20)
Controls.SetSize(send,width,25)
LDShapes.BrushColour(send,"SteelBlue")

value = Controls.AddTextBox(20+2*spacing,20)
Controls.SetSize(value,gw-2*spacing-40,25)
LDShapes.PenColour(value,"White")
LDShapes.BrushColour(value,"DimGray")

tb = Controls.AddMultiLineTextBox(20,60)
Controls.SetTextBoxText(tb,"Connection status : "+status)
Controls.SetSize(tb,gw-40,100)
LDShapes.PenColour(tb,"White")
LDShapes.BrushColour(tb,"DimGray")
EndSub

'==================================================
'EVENT SUBROUTINES
'==================================================

Sub OnDataReceived
dataIn = Text.Append(dataIn,LDCommPort.RXAll())
If (Text.IsSubText(dataIn,nl)) Then
newData = LDText.Trim(dataIn)
dataIn = ""
EndIf
EndSub

Sub OnButtonClicked
button = Controls.LastClickedButton
If (button = clear) Then
tbData = ""
ElseIf (button = send) Then
val = Controls.GetTextBoxText(value)
If (val = Math.Round(val)) Then
tbData = Text.Append("*** "+val+" sent as integer ***"+nl,Controls.GetTextBoxText(tb))
val = "i"+val
ElseIf (val+0 = val) Then
tbData = Text.Append("*** "+val+" sent as float ***"+nl,Controls.GetTextBoxText(tb))
val = "f"+val
ElseIf (val <> "") Then
tbData = Text.Append("*** "+val+" sent as string ***"+nl,Controls.GetTextBoxText(tb))
val = "s"+val
Else
tbData = Text.Append("*** Nothing sent ***"+nl,Controls.GetTextBoxText(tb))
EndIf
If (val <> "") Then
LDCommPort.TXString(val)
EndIf
Else
For i = 1 To nButton
If (button = buttons[i]) Then
tbData = Text.Append("*** Action "+i+" instruction sent ***"+nl,Controls.GetTextBoxText(tb))
LDCommPort.TXString(i)
EndIf
EndFor
EndIf
Controls.SetTextBoxText(tb,tbData)
EndSub