Visual Basic is what is known as on Object Oriented Language, so you add Objects (Lines, Boxes, Shapes) to a form and then create some matching code which is executed when you Click (usually) on that object.
The modified Form for the Points Program now looks like.
This lot !!
Private Sub Clockwise_Click()
MSComm1.Output = "C" ' Sends a "C" to the Arduino code which makes the Servo turn
Clockwise.Enabled = False ' Disables the "Clockwise" button so we can't press it by mistake
Line2.BorderColor = &HC0C0FF ' Changes Line 2 to a beige kind of colour
Line1.BorderColor = &HC0C0FF ' Does the same to line 1, which you can't really make out
Shape7.FillColor = vbRed ' Changes the Signal (Shape7) from Green to Red
End Sub
At the end of the Arduino Code which rotates the Servo Clockwise, there's a line which looks like
Serial.print("H"); delay(2000); Serial.write("h");
This sends an "H" back to the VB Program, pauses for a couple of seconds, then sends an "h".
This is the Code in the VB Program to receive the Input character and then carry out further code instructions depending on which character has been received.
Private Sub MSComm1_OnComm() 'checks if something has happened at the Serial Port
If MSComm1.CommEvent = comEvReceive Then ' Checks to see if "something" is a receive
inputchar = "" ' gets rid of anything left from beofre
inputchar = MSComm1.Input ' reads what character has just been received
If inputchar = "H" Then Anticlock_Lines ' If it is an "H" then go to a procedure called
' Anticlock Lines see below for what it's like.
If inputchar = "h" Then Anticlock_Lights ' Same idea
If inputchar = "L" Then Clock_Lines
If inputchar = "l" Then Clock_Lights
End If
End Sub
Sub Anticlock_Lines()
Line2.BorderColor = &H80FF80 'Changes the line colour to a kind of Beige
Shape8.FillColor = vbRed ' Changes the Signal Colour to Red
Line1.BorderColor = vbRed ' Changes the Line1 colour to Red
Line1.ZOrder (1) ' Brings line 1 to the top (aesthetic appearance or the)
Line2.ZOrder (0) ' Sends line 2 to the bottom (overlap would look weird.)
End Sub
The complete Program
Private Sub EndProg_Click()
MSComm1.Output = "E"
End
End Sub
Private Sub Selectport_Click()
On Error GoTo porterror
portnumber = InputBox("Enter a number", "Choose Port 1 . . 8", 4)
MSComm1.RThreshold = 1
MSComm1.CommPort = portnumber
MSComm1.PortOpen = True
MSComm1.DTREnable = False
MSComm1.Output = "X"
Selectport.Visible = False
EndProg.Visible = True
Exit Sub
porterror:
MsgBox ("Invalid Port Number" & Chr(13) & "Use numbers from 1 to 8")
End Sub
Private Sub AntiClock_Click()
MSComm1.Output = "A" ' Sends A to Arduino (Anticlockwise)
AntiClock.Enabled = False ' VB Command to disable Anticlockwise Button
MSComm1.Output = "g" ' Sends G Switch on Green LED
MSComm1.Output = "R" ' Sends r Switch off Red LED
Line1.BorderColor = &HC0C0FF
Line2.BorderColor = &HC0C0FF
Shape8.FillColor = vbRed
End Sub
Private Sub Clockwise_Click()
MSComm1.Output = "C"
Clockwise.Enabled = False
Line2.BorderColor = &HC0C0FF
Line1.BorderColor = &HC0C0FF
Shape7.FillColor = vbRed
End Sub
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
inputchar = ""
inputchar = MSComm1.Input
If inputchar = "H" Then Anticlock_Lines
If inputchar = "h" Then Anticlock_Lights
If inputchar = "L" Then Clock_Lines
If inputchar = "l" Then Clock_Lights
End If
End Sub
Sub Clock_Lines()
Line2.BorderColor = vbRed
Line1.BorderColor = &H80FF80
Line1.ZOrder (0)
Line2.ZOrder (1)
End Sub
Sub Clock_Lights()
Shape8.FillColor = vbGreen
AntiClock.Enabled = True
End Sub
Sub Anticlock_Lines()
Line2.BorderColor = &H80FF80
Shape8.FillColor = vbRed
Line1.BorderColor = vbRed
Line1.ZOrder (1)
Line2.ZOrder (0)
End Sub
Sub Anticlock_Lights()
Shape7.FillColor = vbGreen
Clockwise.Enabled = True
End Sub
3 Pictures showing how some of the colours change and a video of the Servo working.
Before. During After
What are you using for serial communication between the PC and the Arduino?
ReplyDelete