Lo-Fi teleskop pekaren (4 / 6 steg)
Steg 4: Lägga till VB.NET seriell kommunikation
I princip är det ett enkelt seriellt gränssnitt, det är inte svårt att inse och det finns en hel del tutorials om detta. Men jag vill dela min egen version med några förklaringar.
Denna funktion visar alla tillgängliga COM -portar och visar dem i en ComboBox. Du kan inte använda ButtonConnect tills det finns inga tillgängliga COM -portar.
Sub refreshCOM()
ComboBox_COM. Items.Clear()
För varje sp som sträng i My.Computer.Ports.SerialPortNames
ComboBox_COM. Items.Add(sp)
Nästa
Om ComboBox_COM. Items.Count = 0 då
Annat
ComboBox_COM. Text = ComboBox_COM. Items.Item(0). ToString
Slut om
Om ComboBox_COM. Text = "" sedan
ButtonConnect.Enabled = False
Annat
ButtonConnect.Enabled = sant
Slut om
End Sub
Seriell port setup med DTR inaktivera för att hålla Arduino som väntar på PC korrekt öppnar porten.
Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) hanterar MyBase.Load
refreshCOM()
SerialPort1.Close()
SerialPort1.DataBits = 8
SerialPort1.Parity = Parity.None
SerialPort1.StopBits = StopBits.One
SerialPort1.Handshake = Handshake.None
SerialPort1.Encoding = System.Text.Encoding.Default
SerialPort1.DtrEnable = False
End Sub
Slutligen kan vi försöka ansluta med den seriella porten och om något går fel, vi kan aktivera DTR. Jag har några problem under Bluetooth-kommunikation: det verkar att Arduino inte vänta för DTR aktivering... Jag tycker det är på grund av en saknad anslutning mellan min BT styrelse och Linvor transceiver.
Private Sub ButtonConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) hanterar ButtonConnect.Click
SerialPort1.Close()
SerialPort1.PortName = ComboBox_COM. Text.ToString
SerialPort1.BaudRate = ComboBox_BAUD. Text
Försök
SerialPort1.Open()
Fånga som undantag
MsgBox ("fel under sköld anslutning.")
Slutet försök
Om SerialPort1.IsOpen sedan
TextBox1.Clear()
Label2.Enabled = sant
MaskedTextBox1.Enabled = sant
ButtonSetSpeed.Enabled = sant
SerialPort1.DiscardInBuffer()
SerialPort1.DtrEnable = sant
Annat
Label2.Enabled = False
MaskedTextBox1.Enabled = False
ButtonSetSpeed.Enabled = False
Slut om
End Sub
Detta är seriell port läser metoden, på programmet uppdateras också GUI värden i StatusStrip och kommer ger raw strängar i en dedikerad TextBox (för utomhus snabb felsökning).
Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) hanterar SerialPort1.DataReceived
Försök
Dim line As String = SerialPort1.ReadLine
TextBox1.Invoke (nya ReadSerialDelegate(AddressOf ReadSerial), linje. ToString)
Fånga som undantag
SerialPort1.Close()
Slutet försök
End Sub
Delegera Sub ReadSerialDelegate (ByVal s som sträng)
Public Sub ReadSerial (ByVal s som sträng)
TextBox1.Text + = s + vbNewLine
TextBox1.SelectionStart = TextBox1.Text.Length - 1
TextBox1.ScrollToCaret()
Om s.Contains("charge") sedan
Label_Battery.text = s.Substring (s.Length - 4, 3)
ElseIf s.Contains("speed") sedan
Label_Speed.text = s.Substring (s.Length - 4, 3)
Slut om
End Sub
Skriva metod är verkligen enkelt, brukar jag spendera ord med det.
Private Sub ButtonSetSpeed_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) hanterar ButtonSetSpeed.Click
Försök
SerialPort1.Write(MaskedTextBox1.Text)
Label_Speed.text = MaskedTextBox1.Text
Fånga som undantag
MsgBox (vbInformation, "Kan inte skriva på" + SerialPort1.PortName)
Slutet försök
End Sub
Så nu har vi en nakna ben kod för att hantera hela seriell kommunikation.