Stap 4: Voeg de VB.NET seriële communicatie
In principe is het een eenvoudige seriële interface, het is niet moeilijk te realiseren en er zijn een heleboel tutorials over dit. Maar ik wil delen mijn eigen versie met enige uitleg.
Deze functie ziet u alle beschikbare COM -poorten en weergegeven in een ComboBox. U kunt ButtonConnect niet gebruiken, zolang er geen beschikbare COM -poorten niet zijn.
Sub refreshCOM() ComboBox_COM.Items.Clear() For Each sp As String In My.Computer.Ports.SerialPortNames ComboBox_COM.Items.Add(sp) Next If ComboBox_COM.Items.Count = 0 Then Else ComboBox_COM.Text = ComboBox_COM.Items.Item(0).ToString End If If ComboBox_COM.Text = "" Then ButtonConnect.Enabled = False Else ButtonConnect.Enabled = True End If End Sub
De installatie van de seriële poort met DTR uitschakelen zodat de Arduino te wachten totdat de PC de poort correct wordt geopend.
Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 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
Tot slot kunnen we proberen te verbinden met de seriële poort, en als niets verkeerd gaat, kunnen we de DTR. Ik heb sommige problemen tijdens Bluetooth communicatie: het lijkt erop dat de Arduino niet voor het inschakelen van de DTR wachten ... Ik denk dat het als gevolg van een ontbrekende verbinding tussen mijn BT bestuur en Linvor transceiver.
Private Sub ButtonConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonConnect.Click SerialPort1.Close() SerialPort1.PortName = ComboBox_COM.Text.ToString SerialPort1.BaudRate = ComboBox_BAUD.Text Try SerialPort1.Open() Catch ex As Exception MsgBox("Error during shield connection.") End Try If SerialPort1.IsOpen Then TextBox1.Clear() Label2.Enabled = True MaskedTextBox1.Enabled = True ButtonSetSpeed.Enabled = True SerialPort1.DiscardInBuffer() SerialPort1.DtrEnable = True Else Label2.Enabled = False MaskedTextBox1.Enabled = False ButtonSetSpeed.Enabled = False End If End Sub
Dit is de seriële poort lezen methode, het het programma zal ook vernieuwen GUI waarden in de StatusStrip en zal de rauwe snaren geeft in een speciale TextBox (voor buiten snelle foutopsporing).
Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived Try Dim line As String = SerialPort1.ReadLine TextBox1.Invoke(New ReadSerialDelegate(AddressOf ReadSerial), line.ToString) Catch ex As Exception SerialPort1.Close() End Try End Sub Delegate Sub ReadSerialDelegate(ByVal s As String) Public Sub ReadSerial(ByVal s As String) TextBox1.Text += s + vbNewLine TextBox1.SelectionStart = TextBox1.Text.Length - 1 TextBox1.ScrollToCaret() If s.Contains("charge") Then Label_Battery.Text = s.Substring(s.Length - 4, 3) ElseIf s.Contains("speed") Then Label_Speed.Text = s.Substring(s.Length - 4, 3) End If End Sub
Schrijven methode is heel simpel, zal niet ik besteden woorden mee.
Private Sub ButtonSetSpeed_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonSetSpeed.Click Try SerialPort1.Write(MaskedTextBox1.Text) Label_Speed.Text = MaskedTextBox1.Text Catch ex As Exception MsgBox(vbInformation, "Unable to write at " + SerialPort1.PortName) End Try End Sub
Dus nu hebben we een kale botten code om hele seriële communicatie.