351 lines
14 KiB
VB.net
351 lines
14 KiB
VB.net
'Serial Port Interfacing with VB.net 2010 Express Edition
|
|
'Copyright (C) 2010 Richard Myrick T. Arellaga
|
|
'
|
|
'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/>.
|
|
|
|
|
|
Imports System
|
|
Imports System.ComponentModel
|
|
Imports System.Threading
|
|
Imports System.IO.Ports
|
|
Public Class frmMain
|
|
Dim myPort As Array 'COM Ports detected on the system will be stored here
|
|
Delegate Sub SetTextCallback(ByVal [text] As String) 'Added to prevent threading errors during receiveing of data
|
|
|
|
Dim Buffer(4) As Byte
|
|
Dim CommandSend As String
|
|
Dim AllIndex As String
|
|
|
|
|
|
|
|
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
|
|
'When our form loads, auto detect all serial ports in the system and populate the cmbPort Combo box.
|
|
myPort = IO.Ports.SerialPort.GetPortNames() 'Get all com ports available
|
|
cmbBaud.Items.Add(9600) 'Populate the cmbBaud Combo box to common baud rates used
|
|
|
|
For i = 0 To UBound(myPort)
|
|
cmbPort.Items.Add(myPort(i))
|
|
Next
|
|
cmbPort.Text = cmbPort.Items.Item(0) 'Set cmbPort text to the first COM port detected
|
|
cmbBaud.Text = cmbBaud.Items.Item(0) 'Set cmbBaud text to the first Baud rate on the list
|
|
|
|
btnDisconnect.Enabled = False 'Initially Disconnect Button is Disabled
|
|
|
|
Me.Text =
|
|
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name.ToString() & " " & _
|
|
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()
|
|
|
|
End Sub
|
|
|
|
Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
|
|
SerialPort1.PortName = cmbPort.Text 'Set SerialPort1 to the selected COM port at startup
|
|
SerialPort1.BaudRate = cmbBaud.Text 'Set Baud rate to the selected value on
|
|
|
|
'Other Serial Port Property
|
|
SerialPort1.Parity = IO.Ports.Parity.None
|
|
SerialPort1.StopBits = IO.Ports.StopBits.One
|
|
SerialPort1.DataBits = 8 'Open our serial port
|
|
SerialPort1.Open()
|
|
|
|
btnConnect.Enabled = False 'Disable Connect button
|
|
btnDisconnect.Enabled = True 'and Enable Disconnect button
|
|
GroupBox1.Enabled = True
|
|
|
|
|
|
End Sub
|
|
|
|
Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click
|
|
SerialPort1.Close() 'Close our Serial Port
|
|
|
|
btnConnect.Enabled = True
|
|
btnDisconnect.Enabled = False
|
|
GroupBox1.Enabled = False
|
|
Timer1.Enabled = False
|
|
CheckBoxWTauto.Checked = False
|
|
CheckBoxRTauto.Checked = False
|
|
CheckBoxPHauto.Checked = False
|
|
CheckBoxALLauto.Checked = False
|
|
End Sub
|
|
|
|
Private Sub btnWaterTemp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnWaterTemp.Click
|
|
|
|
'AA 01 01 BB , Enquiry DS18B20 temperature
|
|
'AA 01 02 BB , Enquiry LM35 temperature
|
|
'AA 01 03 BB , Enquiry PH reading
|
|
'AA 01 04 BB , Enqyiry DS18B20 , LM35 and Ph
|
|
Buffer(0) = &HAA
|
|
Buffer(1) = &H1
|
|
Buffer(2) = &H1
|
|
Buffer(3) = &HBB
|
|
SerialPort1.Write(Buffer, 0, 3)
|
|
CommandSend = "WT" 'Enquiry Water Temperature Command Send
|
|
|
|
End Sub
|
|
|
|
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
|
|
'ReceivedText(SerialPort1.ReadExisting()) 'Automatically called every time a data is received at the serialPort
|
|
ReceivedText(SerialPort1.ReadTo(Chr(10))) ' Read until New Line Char(10)
|
|
End Sub
|
|
Private Sub ReceivedText(ByVal [text] As String)
|
|
'compares the ID of the creating Thread to the ID of the calling Thread
|
|
If Me.rtbReceived.InvokeRequired Then
|
|
Dim x As New SetTextCallback(AddressOf ReceivedText)
|
|
Me.Invoke(x, New Object() {(text)})
|
|
Else
|
|
'Me.rtbReceived.Text &= [text]
|
|
Dim newString As String = [text].Replace(vbCr, "") 'Remove Carriage Return
|
|
Dim y As String
|
|
Select Case CommandSend
|
|
Case "WT"
|
|
y = " Water Temperature : "
|
|
Me.labelWaterTemperature.Text = newString
|
|
If CheckBoxWTlog.Checked = True Then
|
|
Dim file As System.IO.StreamWriter
|
|
file = My.Computer.FileSystem.OpenTextFileWriter("c:\temp\water.csv", True)
|
|
file.WriteLine(Format(TimeOfDay, "HH:mm:ss") + "," + newString)
|
|
file.Close()
|
|
End If
|
|
Case "RT"
|
|
y = " Room Temperature : "
|
|
Me.labelRoomTemperature.Text = newString
|
|
If CheckBoxWTlog.Checked = True Then
|
|
Dim file As System.IO.StreamWriter
|
|
file = My.Computer.FileSystem.OpenTextFileWriter("c:\temp\room.csv", True)
|
|
file.WriteLine(Format(TimeOfDay, "HH:mm:ss") + "," + newString)
|
|
file.Close()
|
|
End If
|
|
Case "PH"
|
|
y = " PH : "
|
|
If CheckBoxWTlog.Checked = True Then
|
|
Dim file As System.IO.StreamWriter
|
|
file = My.Computer.FileSystem.OpenTextFileWriter("c:\temp\ph.csv", True)
|
|
file.WriteLine(Format(TimeOfDay, "HH:mm:ss") + "," + newString)
|
|
file.Close()
|
|
End If
|
|
Me.labelPhReading.Text = newString
|
|
Case "ALL"
|
|
Select Case AllIndex
|
|
Case "1"
|
|
y = " Water Temperature : "
|
|
Me.labelWaterTemperature.Text = newString
|
|
If CheckBoxWTlog.Checked = True Then
|
|
Dim file As System.IO.StreamWriter
|
|
file = My.Computer.FileSystem.OpenTextFileWriter("c:\temp\water.csv", True)
|
|
file.WriteLine(Format(TimeOfDay, "HH:mm:ss") + "," + newString)
|
|
file.Close()
|
|
End If
|
|
AllIndex = "2"
|
|
Case "2"
|
|
y = " Room Temperature : "
|
|
Me.labelRoomTemperature.Text = newString
|
|
If CheckBoxWTlog.Checked = True Then
|
|
Dim file As System.IO.StreamWriter
|
|
file = My.Computer.FileSystem.OpenTextFileWriter("c:\temp\room.csv", True)
|
|
file.WriteLine(Format(TimeOfDay, "HH:mm:ss") + "," + newString)
|
|
file.Close()
|
|
End If
|
|
AllIndex = "3"
|
|
Case "3"
|
|
y = " PH : "
|
|
Me.labelPhReading.Text = newString
|
|
If CheckBoxWTlog.Checked = True Then
|
|
Dim file As System.IO.StreamWriter
|
|
file = My.Computer.FileSystem.OpenTextFileWriter("c:\temp\ph.csv", True)
|
|
file.WriteLine(Format(TimeOfDay, "HH:mm:ss") + "," + newString)
|
|
file.Close()
|
|
End If
|
|
AllIndex = ""
|
|
Case Else
|
|
y = " Invaild Command Send "
|
|
End Select
|
|
Case Else
|
|
y = " Invaild Command Send "
|
|
End Select
|
|
|
|
|
|
Me.rtbReceived.AppendText(Format(TimeOfDay, "HH:mm:ss") + y + newString + vbCrLf)
|
|
Me.rtbReceived.ScrollToCaret()
|
|
|
|
|
|
End If
|
|
|
|
End Sub
|
|
|
|
Private Sub cmbPort_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbPort.SelectedIndexChanged
|
|
If SerialPort1.IsOpen = False Then
|
|
SerialPort1.PortName = cmbPort.Text 'pop a message box to user if he is changing ports
|
|
Else 'without disconnecting first.
|
|
MsgBox("Valid only if port is Closed", vbCritical)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub cmbBaud_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbBaud.SelectedIndexChanged
|
|
If SerialPort1.IsOpen = False Then
|
|
SerialPort1.BaudRate = cmbBaud.Text 'pop a message box to user if he is changing baud rate
|
|
Else 'without disconnecting first.
|
|
MsgBox("Valid only if port is Closed", vbCritical)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub txtTransmit_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
|
|
|
|
End Sub
|
|
|
|
|
|
Private Sub btnRoomTemp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRoomTemp.Click
|
|
'AA 01 01 BB , Enquiry DS18B20 temperature
|
|
'AA 01 02 BB , Enquiry LM35 temperature
|
|
'AA 01 03 BB , Enquiry PH reading
|
|
'AA 01 04 BB , Enqyiry DS18B20 , LM35 and Ph
|
|
Buffer(0) = &HAA
|
|
Buffer(1) = &H1
|
|
Buffer(2) = &H2
|
|
Buffer(3) = &HBB
|
|
SerialPort1.Write(Buffer, 0, 3)
|
|
CommandSend = "RT" 'Enquiry Room Temperature Command Send
|
|
End Sub
|
|
|
|
Private Sub btnPh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPh.Click
|
|
'AA 01 01 BB , Enquiry DS18B20 temperature
|
|
'AA 01 02 BB , Enquiry LM35 temperature
|
|
'AA 01 03 BB , Enquiry PH reading
|
|
'AA 01 04 BB , Enqyiry DS18B20 , LM35 and Ph
|
|
Buffer(0) = &HAA
|
|
Buffer(1) = &H1
|
|
Buffer(2) = &H3
|
|
Buffer(3) = &HBB
|
|
SerialPort1.Write(Buffer, 0, 3)
|
|
CommandSend = "PH" 'Enquiry PH Command Send
|
|
End Sub
|
|
|
|
Private Sub bntReadAll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bntReadAll.Click
|
|
'AA 01 01 BB , Enquiry DS18B20 temperature
|
|
'AA 01 02 BB , Enquiry LM35 temperature
|
|
'AA 01 03 BB , Enquiry PH reading
|
|
'AA 01 04 BB , Enqyiry DS18B20 , LM35 and Ph
|
|
Buffer(0) = &HAA
|
|
Buffer(1) = &H1
|
|
Buffer(2) = &H4
|
|
Buffer(3) = &HBB
|
|
SerialPort1.Write(Buffer, 0, 3)
|
|
CommandSend = "ALL" 'Enquiry All Command Send
|
|
AllIndex = "1"
|
|
End Sub
|
|
|
|
Private Sub rtbReceived_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rtbReceived.TextChanged
|
|
|
|
End Sub
|
|
|
|
Private Sub CheckBoxWTauto_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBoxWTauto.CheckedChanged
|
|
If CheckBoxWTauto.Checked = True Then
|
|
CheckBoxRTauto.Checked = False
|
|
CheckBoxPHauto.Checked = False
|
|
Timer1.Enabled = True
|
|
Else
|
|
Timer1.Enabled = False
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
|
|
|
|
'AA 01 01 BB , Enquiry DS18B20 temperature
|
|
'AA 01 02 BB , Enquiry LM35 temperature
|
|
'AA 01 03 BB , Enquiry PH reading
|
|
'AA 01 04 BB , Enqyiry DS18B20 , LM35 and Ph
|
|
|
|
If CheckBoxWTauto.Checked = True Then
|
|
Buffer(0) = &HAA
|
|
Buffer(1) = &H1
|
|
Buffer(2) = &H1
|
|
Buffer(3) = &HBB
|
|
SerialPort1.Write(Buffer, 0, 3)
|
|
CommandSend = "WT" 'Enquiry Water Temperature Command Send
|
|
End If
|
|
|
|
If CheckBoxRTauto.Checked = True Then
|
|
Buffer(0) = &HAA
|
|
Buffer(1) = &H1
|
|
Buffer(2) = &H2
|
|
Buffer(3) = &HBB
|
|
SerialPort1.Write(Buffer, 0, 3)
|
|
CommandSend = "RT" 'Enquiry Room Temperature Command Send
|
|
End If
|
|
|
|
If CheckBoxPHauto.Checked = True Then
|
|
Buffer(0) = &HAA
|
|
Buffer(1) = &H1
|
|
Buffer(2) = &H3
|
|
Buffer(3) = &HBB
|
|
SerialPort1.Write(Buffer, 0, 3)
|
|
CommandSend = "PH" 'Enquiry PH Command Send
|
|
End If
|
|
|
|
If CheckBoxALLauto.Checked = True Then
|
|
Buffer(0) = &HAA
|
|
Buffer(1) = &H1
|
|
Buffer(2) = &H4
|
|
Buffer(3) = &HBB
|
|
SerialPort1.Write(Buffer, 0, 3)
|
|
CommandSend = "ALL" 'Enquiry All Command Send
|
|
AllIndex = "1"
|
|
End If
|
|
|
|
End Sub
|
|
|
|
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
|
|
Me.rtbReceived.Text = ""
|
|
End Sub
|
|
|
|
Private Sub CheckBoxALLauto_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBoxALLauto.CheckedChanged
|
|
If CheckBoxALLauto.Checked = True Then
|
|
CheckBoxWTauto.Checked = False
|
|
CheckBoxWTauto.Enabled = False
|
|
CheckBoxRTauto.Checked = False
|
|
CheckBoxRTauto.Enabled = False
|
|
CheckBoxPHauto.Checked = False
|
|
CheckBoxPHauto.Enabled = False
|
|
Timer1.Enabled = True
|
|
Else
|
|
CheckBoxWTauto.Enabled = True
|
|
CheckBoxRTauto.Enabled = True
|
|
CheckBoxPHauto.Enabled = True
|
|
Timer1.Enabled = False
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub CheckBoxRTauto_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBoxRTauto.CheckedChanged
|
|
|
|
If CheckBoxRTauto.Checked = True Then
|
|
CheckBoxWTauto.Checked = False
|
|
CheckBoxPHauto.Checked = False
|
|
Timer1.Enabled = True
|
|
Else
|
|
Timer1.Enabled = False
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub CheckBoxPHauto_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBoxPHauto.CheckedChanged
|
|
|
|
If CheckBoxPHauto.Checked = True Then
|
|
CheckBoxWTauto.Checked = False
|
|
CheckBoxRTauto.Checked = False
|
|
Timer1.Enabled = True
|
|
Else
|
|
Timer1.Enabled = False
|
|
End If
|
|
End Sub
|
|
|
|
|
|
End Class
|