1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| Option Strict On
Option Explicit On
Imports System.IO.Ports
Public Class Form1
Public WithEvents SerialPort1 As SerialPort = New System.IO.Ports.SerialPort
Dim TexteRecu As New TextBox
Delegate Sub SetTextCallback(ByVal Recu As String)
Dim VarA, VarB, VarC As Integer
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If SerialPort1.IsOpen Then SerialPort1.Close()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Controls.Add(TexteRecu)
TexteRecu.Size = New Size(TexteRecu.Width * 2, TexteRecu.Height)
AddHandler TexteRecu.TextChanged, AddressOf TextRecu_TextChanged
With SerialPort1
.BaudRate = 9600
.Parity = Parity.None
.DataBits = 8
.StopBits = StopBits.One
.PortName = "COM3" 'à changer au besoin
.Open()
End With
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
System.Threading.Thread.Sleep(100) 'une pause de 100ms
Try
SetText(SerialPort1.ReadExisting())
Catch ex As Exception
End Try
End Sub
Private Sub SetText(ByVal Recu As String)
If Me.TexteRecu.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SetText)
Me.BeginInvoke(d, New Object() {Recu})
Else
Me.TexteRecu.Text = Recu
End If
End Sub
Private Sub TextRecu_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
If TexteRecu.Text.StartsWith("0D") And TexteRecu.TextLength = 10 Then
VarA = (Convert.ToInt32(TexteRecu.Text.ToCharArray(2, 2), 16) * 256) + Convert.ToInt32(TexteRecu.Text.ToCharArray(4, 2), 16)
VarB = Convert.ToInt32(TexteRecu.Text.ToCharArray(6, 2), 16)
VarC = Convert.ToInt32(TexteRecu.Text.ToCharArray(8, 2), 16)
Me.Text = VarA & " " & VarB & " " & VarC
End If
End Sub
End Class |
Partager