VB Code.
' Arduino <> Firmata <> Visual Basic .NET
' ArduinoFirmataVBExtended
' Program to demonstrate the use of FirmataVB, DigitalPinControl
' and AnalogPinControl components
' The program communicates with an Arduino Diecimila
' running the freely available Standard Firmata Library (see links below
' for info on Firmata)
' Copyright (c) 2009 Andrew Craigie. All rights reserved
' http://www.acraigie.com
'This program is free software: you can redistribute it and/or modify
'it under the terms of the GNU General Public License as published by
'the Free Software Foundation, either version 3 of the License, or
'(at your option) any later version.
'This program is distributed in the hope that it will be useful,
'but WITHOUT ANY WARRANTY; without even the implied warranty of
'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
'GNU General Public License for more details.
'You should have received a copy of the GNU General Public License
'along with this program. If not, see <http://www.gnu.org/licenses/>.
'
' Firmata is a generic protocol for communicating with microcontrollers
' from software on a host computer
' Firmata library http://www.firmata.org and http://sourceforge.net/projects/firmata
Public Class Form1
Private DigitalPins As New Hashtable
Private AnalogPins As New Hashtable
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
FillCOMsCombo()
FillBaudCombo()
UpdateToolStrip()
For Each ctrl As System.Windows.Forms.Control In Me.Controls
Dim ThisCtrl As Firmata.DigitalPinControl = Nothing
If TypeOf ctrl Is Firmata.DigitalPinControl Then
ThisCtrl = ctrl
DigitalPins.Add(CStr(ThisCtrl.PinNumber), ThisCtrl)
AddHandler ThisCtrl.DigitalSend, AddressOf DigitalPinControl_DigitalSend
AddHandler ThisCtrl.PinMode_Changed, AddressOf DigitalPinControl_PinMode_Changed
AddHandler ThisCtrl.PWMSend, AddressOf DigitalPinControl_PWMSend
End If
Next
For Each ctrl As System.Windows.Forms.Control In Me.Controls
Dim ThisCtrl As Firmata.AnalogPinControl = Nothing
If TypeOf ctrl Is Firmata.AnalogPinControl Then
ThisCtrl = ctrl
AnalogPins.Add(CStr(ThisCtrl.PinNumber), ThisCtrl)
AddHandler ThisCtrl.AnalogOnOff_Changed, AddressOf AnalogPinControl_AnalogOnOff_Changed
End If
Next
'If FirmataVB1 IsNot Nothing Then
'FirmataVB1.Connect("COM4", 115200)
'End If
End Sub
Private Sub DigitalPinControl_DigitalSend(ByVal PinNumber As Integer, ByVal value As Integer)
FirmataVB1.DigitalWrite(PinNumber, value)
End Sub
Private Sub DigitalPinControl_PinMode_Changed(ByVal PinNumber As Integer, ByVal Mode As Firmata.DigitalPinControl.PinModes)
If FirmataVB1.PortOpen = True Then
FirmataVB1.PinMode(PinNumber, Mode)
End If
End Sub
Private Sub DigitalPinControl_PWMSend(ByVal PinNumber As Integer, ByVal PWMValue As Integer)
FirmataVB1.AnalogWrite(PinNumber, PWMValue)
End Sub
Private Sub AnalogPinControl_AnalogOnOff_Changed(ByVal PinNumber As Integer, ByVal OnOff As Integer)
FirmataVB1.AnalogPinReport(PinNumber, OnOff)
End Sub
Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click
If FirmataVB1.PortOpen = True Then
FirmataVB1.Disconnect()
End If
Me.Close()
End Sub
Private Sub cbPort_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbPort1.CheckedChanged, cbPort0.CheckedChanged
Dim cbOnOff As System.Windows.Forms.CheckBox
cbOnOff = sender
Dim portNumber As Integer
portNumber = CInt(cbOnOff.Tag)
Dim OnOff As Integer = 0
If cbOnOff.Checked = True Then
cbOnOff.Text = "On"
OnOff = 1
FirmataVB1.DigitalPortReport(portNumber, OnOff)
For Each de As DictionaryEntry In DigitalPins
Dim ctrl As Firmata.DigitalPinControl
ctrl = DigitalPins(de.Key)
If ctrl.Port = portNumber Then
ctrl.MyPortReporting = True
End If
Next
Else
cbOnOff.Text = "Off"
OnOff = 0
FirmataVB1.DigitalPortReport(portNumber, OnOff)
For Each de As DictionaryEntry In DigitalPins
Dim ctrl As Firmata.DigitalPinControl
ctrl = DigitalPins(de.Key)
If ctrl.Port = portNumber Then
ctrl.MyPortReporting = False
End If
Next
End If
End Sub
Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click
' Dispose of components then
If Not FirmataVB1 Is Nothing Then
FirmataVB1.Disconnect()
FirmataVB1 = Nothing
End If
Me.Close()
End Sub
Private Sub AboutToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AboutToolStripMenuItem.Click
System.Diagnostics.Process.Start("http://www.acraigie.com/programming/firmatavb/default.html")
End Sub
Private Sub HelpToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles HelpToolStripMenuItem1.Click
System.Diagnostics.Process.Start("http://www.acraigie.com/programming/firmatavb/default.html")
End Sub
Public Sub FillCOMsCombo()
tscbCOMList.Items.AddRange(FirmataVB1.COMPortList())
tscbCOMList.Text = Firmata.FirmataVB.DEFAULT_COM_PORT
' or set it to the COM port property of this instance of FirmataVB ...
' tscbCOMList.Text = FirmataVB1.PortName
End Sub
Public Sub FillBaudCombo()
tscbBaud.Items.AddRange(FirmataVB1.CommonBaudRates())
tscbBaud.Text = Firmata.FirmataVB.DEFAULT_BAUD_RATE
' or set it to the Baud property of this instance of FirmataVB
' tscbBaud.text = FirmataVB1.Baud
End Sub
Private Sub tscbCOMList_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tscbCOMList.Click
If tscbCOMList.Text <> "" Then
FirmataVB1.COMPortName = tscbCOMList.Text
End If
End Sub
Private Sub tscbBaud_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tscbBaud.Click
If tscbBaud.Text <> "" Then
FirmataVB1.Baud = CInt(tscbBaud.Text)
End If
End Sub
Private Sub tsbtnConnection_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsbtnConnection.Click
If tsbtnConnection.Text = "Connect" Then
FirmataVB1.Connect(tscbCOMList.Text, CInt(tscbBaud.Text))
FirmataVB1.QueryVersion()
UpdateToolStrip()
Else
FirmataVB1.Disconnect()
UpdateToolStrip()
End If
End Sub