Étape 4: Ajouter la communication sérielle VB.NET
Fondamentalement, c’est une simple interface série, il n’est pas difficile à réaliser et il y a beaucoup de tutoriels à ce sujet. Toutefois, je tiens à partager ma propre version avec quelques explications.
Cette fonction vous montre tous les ports COM disponibles et les affiche dans un contrôle ComboBox. Vous ne pouvez pas utiliser le ButtonConnect jusqu'à ce qu’il n’y a aucun ports COM disponibles.
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
Configuration du port série avec DTR désactivation pour garder Arduino en attente jusqu'à ce que PC ouvre correctement le port.
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
Enfin, nous pouvons essayer de vous connecter avec le port série et, si rien ne se passe mal, nous pouvons activer le DTR. J’ai quelques problèmes au cours de la communication Bluetooth : il semble que Arduino n’attend pas pour l’activation de la DB ... Je pense que c’est grâce à un lien manquant entre mon jury de BT et Linvor émetteur/récepteur.
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
Il s’agit de port série lire la méthode, le programme actualisera aussi les valeurs de GUI dans StatusStrip et se donne les chaînes brutes dans une zone de texte dédié (pour le débogage rapide en plein air).
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
Écriture méthode est vraiment simple, je ne passe des mots avec elle.
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
Alors maintenant, nous avons un squelette code pour gérer l’ensemble de la communication série.