The project I'm working on just now involves writing a Program in Visual Basic 6.0 (a Programming Environment I'm comfortable in) linked to an Arduino Uno. So far, I've got as far as controlling a set of traffic lights (3 LEDs on a bit of Breadboard) but I'm happy with that progress so far. There's a long way to go on this, a steep learning curve, but courtesy of Covid 19, I have a lot more time to devote to this kind of project than I would usually have at this time of year.
So far, I have one way communication, next challenge is to get information going the other way. Web forums are very useful things.
For those of you who want to see the "nuts & bolts", here is the Arduino Code
int redled= 12;
int amberled=10;
int greenled=8;
char Inpchar;
void setup()
{
pinMode(redled,OUTPUT);
pinMode(amberled,OUTPUT);
pinMode(greenled,OUTPUT);
Serial.begin(9600);
}
void loop()
{
if (Serial.available()) { Inpchar = Serial.read();} // Reads single character from Input Port
if (Inpchar=='R') { analogWrite(redled,170); } // f sets Red LED On
if (Inpchar=='r') { digitalWrite(redled,LOW); } // e sets Red LED Off
if (Inpchar=='A') { analogWrite(amberled,30); } // d sets Amber LED On
if (Inpchar=='a') { digitalWrite(amberled,LOW); } // c sets Amber LED Off
if (Inpchar=='G') { digitalWrite(greenled,HIGH); } // b sets Green LED On
if (Inpchar=='g') { digitalWrite(greenled,LOW); } // a sets Green LED Off
if (Inpchar=='M') { Serial.write("X"); } //try and send a character back to VB
}
And here's the Visual Basic Code.
The Logic is to send an "R" to switch on the Red LED and an "r" to switch it off again.
MSComm1.Output is the VB command to send data to the serial Port
"Red" is the name used for one of the shapes on the screen, so when I want to change the colour, we need the VB command Red.fillcolor = VBred or Red.fillcolor = VBwhite
Public sequence As Integer
Public Portnumber As Integer
Private Sub Command1_Click()
If sequence = 0 Then
MSComm1.Output = "R"
Red.FillColor = vbRed
MSComm1.Output = "g"
Green.FillColor = vbWhite
MSComm1.Output = "a"
Amber.FillColor = vbWhite
End If
If sequence = 1 Then
MSComm1.Output = "A" 'Amber on
Amber.FillColor = &HFFFF&
End If
If sequence = 2 Then
MSComm1.Output = "a" 'Amber Off
Amber.FillColor = vbWhite
MSComm1.Output = "r" ' Red off
Red.FillColor = vbWhite
MSComm1.Output = "G" 'Green On
Green.FillColor = &HC000&
End If
If sequence = 3 Then
MSComm1.Output = "g" ' Green Off
Green.FillColor = vbWhite
MSComm1.Output = "A" ' Amber on
Amber.FillColor = &HFFFF&
End If
If sequence = 4 Then
MSComm1.Output = "a" 'Amber Off
Amber.FillColor = vbWhite
MSComm1.Output = "R" ' Red On
Red.FillColor = vbRed
End If
sequence = sequence + 1
If sequence = 5 Then sequence = 1
Text1.Text = sequence
End Sub
Private Sub Command2_Click()
End Sub
Private Sub Form_Load()
Text1.Text = ""
sequence = 0
End Sub
Private Sub GreenLight_Click()
If Green.FillColor = &HC000& Then
MSComm1.Output = "g"
Text1.Text = "Green is OFF"
Green.FillColor = vbWhite
Else
MSComm1.Output = "G"
Text1.Text = "Green is ON"
Green.FillColor = &HC000&
End If
End Sub
Private Sub AmberLight_Click()
If Amber.FillColor = &HFFFF& Then
MSComm1.Output = "a"
Text1.Text = "Amber is OFF"
Amber.FillColor = vbWhite
Else
MSComm1.Output = "A"
Text1.Text = "Amber is ON"
Amber.FillColor = &HFFFF&
End If
End Sub
Private Sub RedLight_Click()
If Red.FillColor = vbRed Then
MSComm1.Output = "r"
Text1.Text = "Red is OFF"
Red.FillColor = vbWhite
Else
MSComm1.Output = "R"
Text1.Text = "Red is ON"
Red.FillColor = vbRed
End If
End Sub
Private Sub SelectPort_Click()
On Error GoTo porterror
Portnumber = InputBox("Enter a number for the Comm Port", "Choose Port 1 .. 8", 3)
MSComm1.RThreshold = 3
MSComm1.Settings = "9600,n,8,1"
MSComm1.CommPort = Portnumber ' (Write Port Number on which your Arduino Board is available).
MSComm1.PortOpen = True
MSComm1.DTREnable = False
MSComm1.Output = "X"
SelectPort.Visible = False
Exit Sub
porterror:
MsgBox ("Invalid Port Number" & Chr(13) & "Use numbers from 1 to 8")
End Sub
Private Sub TestSerial_Click()
MSComm1.Output = "M"
End Sub
Private Sub Timer1_Timer()
If MSComm1.PortOpen = False Then Exit Sub
inputchar = MSComm1.Input
If MSComm1.CommEvent = comEvReceive Then
Text1.Text = "recieved data " & inbuffer
' Text1.Text = Text1.Text & InBuffer
End If
If inputchar = "X" Then TrafficLights.BackColor = vbGreen
End Sub
Jim McPherson
Comments
Post a Comment