【发布时间】:2021-05-20 21:55:23
【问题描述】:
感谢您查看我的问题。我正在尝试从 COM 端口读取数据。我有一个启动板微控制器,我已经完成了,所以我可以向它发送单字符代码并让微控制器做出相应的响应。这是当前的应用程序:
目前,我可以根据自己的心意来制作图钉的高低。但是,我想从控制器读取引脚值。我创建了一个子程序,它打开 com 端口并发送导致 a 引脚变为 high 或 low 的字符。
微控制器上的代码已设置,因此如果它收到“T”字符,它会立即发送回单个字符。如何从 com 端口检索这个单个字符?
我是 vb.net 的新手,所以要温柔。代码如下供参考。我使用 sendCom() 函数打开和关闭 com 端口以发送数据。我想要一个 readCom() 函数,如果可能的话,它会抓住我的角色。
感谢您查看我的困境。
~特里斯顿
/------------------------ 参考代码-------- ------------------------------------------
Public Class Form1
Dim myBtn0 As Boolean
Dim myBtn1 As Boolean
Dim myBtn2 As Boolean
Dim myBtn3 As Boolean
Dim myBtn4 As Boolean
Dim myBtn5 As Boolean
Dim myBtn6 As Boolean
Dim myBtn7 As Boolean
Function sendCom(ByVal Data As Char)
Dim myCom As System.IO.Ports.SerialPort
myCom = My.Computer.Ports.OpenSerialPort("COM6", 9600, 0, 8)
myCom.Write(Data)
myCom.Close()
myCom.Dispose()
End Function
Function pinFlip(ByVal pinNum As Integer, ByVal pState As Boolean) As Integer
InfoBox.Clear()
InfoBox.Multiline = True
Select Case pinNum
Case 0
If pState Then
InfoBox.AppendText("C" + Environment.NewLine)
InfoBox.ScrollToCaret()
Else
InfoBox.AppendText("c" + Environment.NewLine)
InfoBox.ScrollToCaret()
End If
Case 1
If pState Then
InfoBox.AppendText("D" + Environment.NewLine)
InfoBox.ScrollToCaret()
Else
InfoBox.AppendText("d" + Environment.NewLine)
InfoBox.ScrollToCaret()
End If
Case 2
If pState Then
InfoBox.AppendText("E" + Environment.NewLine)
InfoBox.ScrollToCaret()
Else
InfoBox.AppendText("e" + Environment.NewLine)
InfoBox.ScrollToCaret()
End If
Case 3
If pState Then
InfoBox.AppendText("F" + Environment.NewLine)
InfoBox.ScrollToCaret()
Else
InfoBox.AppendText("f" + Environment.NewLine)
InfoBox.ScrollToCaret()
End If
Case 4
If pState Then
InfoBox.AppendText("G" + Environment.NewLine)
InfoBox.ScrollToCaret()
Else
InfoBox.AppendText("g" + Environment.NewLine)
InfoBox.ScrollToCaret()
End If
Case 5
If pState Then
InfoBox.AppendText("H" + Environment.NewLine)
InfoBox.ScrollToCaret()
Else
InfoBox.AppendText("h" + Environment.NewLine)
InfoBox.ScrollToCaret()
End If
Case 6
If pState Then
InfoBox.AppendText("I" + Environment.NewLine)
InfoBox.ScrollToCaret()
Else
InfoBox.AppendText("i" + Environment.NewLine)
InfoBox.ScrollToCaret()
End If
Case 7
If pState Then
InfoBox.AppendText("J" + Environment.NewLine)
InfoBox.ScrollToCaret()
Else
InfoBox.AppendText("j" + Environment.NewLine)
InfoBox.ScrollToCaret()
End If
End Select
End Function
Private Sub GetPorts_Click(sender As Object, e As EventArgs) Handles GetPorts.Click
' Show all available COM ports.
ListBox1.Items.Clear()
For Each sp As String In My.Computer.Ports.SerialPortNames
ListBox1.Items.Add(sp)
Next
End Sub
Private Sub Send_Click(sender As Object, e As EventArgs) Handles Send.Click
Dim Data As Char
'Dim Com6 As System.IO.Ports.SerialPort
'Com6 = My.Computer.Ports.OpenSerialPort("COM5", 9600, 0, 8)
Data = "A"
'Com6.Open()
'System.Threading.Thread.Sleep(200)
'Com6.Write(Data)
'System.Threading.Thread.Sleep(200)
'Com6.Close()
'System.Threading.Thread.Sleep(200)
'Com6.Dispose()
sendCom(Data)
P0.BackColor = Color.Green
P1.BackColor = Color.Green
P2.BackColor = Color.Green
P3.BackColor = Color.Green
P4.BackColor = Color.Green
P5.BackColor = Color.Green
P6.BackColor = Color.Green
P7.BackColor = Color.Green
myBtn0 = True
myBtn1 = True
myBtn2 = True
myBtn3 = True
myBtn4 = True
myBtn5 = True
myBtn6 = True
myBtn7 = True
InfoBox.Clear()
InfoBox.Multiline = True
InfoBox.AppendText("All Set High" + Environment.NewLine)
InfoBox.ScrollToCaret()
End Sub
Private Sub SendB_Click(sender As Object, e As EventArgs) Handles SendB.Click
Dim Data As Char
'Dim Com6 As System.IO.Ports.SerialPort
'Com6 = My.Computer.Ports.OpenSerialPort("COM5", 9600, 0, 8)
'Com6.Open()
Data = "B"
' Send strings to a serial port.
'System.Threading.Thread.Sleep(200)
'Com6.Write(Data)
'System.Threading.Thread.Sleep(200)
'Com6.Close()
'System.Threading.Thread.Sleep(200)
'Com6.Dispose()
sendCom(Data)
P0.BackColor = Color.Red
P1.BackColor = Color.Red
P2.BackColor = Color.Red
P3.BackColor = Color.Red
P4.BackColor = Color.Red
P5.BackColor = Color.Red
P6.BackColor = Color.Red
P7.BackColor = Color.Red
myBtn0 = False
myBtn1 = False
myBtn2 = False
myBtn3 = False
myBtn4 = False
myBtn5 = False
myBtn6 = False
myBtn7 = False
InfoBox.Clear()
InfoBox.Multiline = True
InfoBox.AppendText("All Set Low" + Environment.NewLine)
InfoBox.ScrollToCaret()
End Sub
Private Sub myRead_Click(sender As Object, e As EventArgs) Handles myRead.Click
InfoBox.Clear()
InfoBox.Multiline = True
InfoBox.AppendText("The READ!" + Environment.NewLine)
InfoBox.ScrollToCaret()
End Sub
Private Sub PortInfo_Click(sender As Object, e As EventArgs) Handles PortInfo.Click
Dim Com6 As System.IO.Ports.SerialPort
Dim myData As String
InfoBox.Clear()
InfoBox.Multiline = True
Com6 = My.Computer.Ports.OpenSerialPort("COM6", 9600, 0, 8)
myData = "Port Name: " + CStr(Com6.PortName)
InfoBox.AppendText(myData + Environment.NewLine)
InfoBox.ScrollToCaret()
myData = "BaudRate: " + CStr(Com6.BaudRate)
InfoBox.AppendText(myData + Environment.NewLine)
InfoBox.ScrollToCaret()
myData = "Parity: " + CStr(Com6.Parity)
InfoBox.AppendText(myData + Environment.NewLine)
InfoBox.ScrollToCaret()
myData = "Data Width: " + CStr(Com6.DataBits)
InfoBox.AppendText(myData + Environment.NewLine)
InfoBox.ScrollToCaret()
myData = "Stop Bits: " + CStr(Com6.StopBits)
InfoBox.AppendText(myData + Environment.NewLine)
InfoBox.ScrollToCaret()
Com6.Dispose()
End Sub
Private Sub Btn0_Click(sender As Object, e As EventArgs) Handles Btn0.Click
Select Case myBtn0
Case False
P0.BackColor = Color.Green
myBtn0 = True
sendCom("C")
Case True
P0.BackColor = Color.Red
myBtn0 = False
sendCom("K")
End Select
pinFlip(0, myBtn0)
End Sub
Private Sub Btn1_Click(sender As Object, e As EventArgs) Handles Btn1.Click
Select Case myBtn1
Case False
P1.BackColor = Color.Green
myBtn1 = True
sendCom("D")
Case True
P1.BackColor = Color.Red
myBtn1 = False
sendCom("L")
End Select
pinFlip(1, myBtn1)
End Sub
Private Sub Btn2_Click(sender As Object, e As EventArgs) Handles Btn2.Click
Select Case myBtn2
Case False
P2.BackColor = Color.Green
myBtn2 = True
sendCom("E")
Case True
P2.BackColor = Color.Red
myBtn2 = False
sendCom("M")
End Select
pinFlip(2, myBtn2)
End Sub
Private Sub Btn3_Click(sender As Object, e As EventArgs) Handles Btn3.Click
Select Case myBtn3
Case False
P3.BackColor = Color.Green
myBtn3 = True
sendCom("F")
Case True
P3.BackColor = Color.Red
myBtn3 = False
sendCom("N")
End Select
pinFlip(3, myBtn3)
End Sub
Private Sub Btn4_Click(sender As Object, e As EventArgs) Handles Btn4.Click
Select Case myBtn4
Case False
P4.BackColor = Color.Green
myBtn4 = True
sendCom("G")
Case True
P4.BackColor = Color.Red
myBtn4 = False
sendCom("O")
End Select
pinFlip(4, myBtn4)
End Sub
Private Sub Btn5_Click(sender As Object, e As EventArgs) Handles Btn5.Click
Select Case myBtn5
Case False
P5.BackColor = Color.Green
myBtn5 = True
sendCom("H")
Case True
P5.BackColor = Color.Red
myBtn5 = False
sendCom("P")
End Select
pinFlip(5, myBtn5)
End Sub
Private Sub Btn6_Click(sender As Object, e As EventArgs) Handles Btn6.Click
Select Case myBtn6
Case False
P6.BackColor = Color.Green
myBtn6 = True
sendCom("I")
Case True
P6.BackColor = Color.Red
myBtn6 = False
sendCom("Q")
End Select
pinFlip(6, myBtn6)
End Sub
Private Sub Btn7_Click(sender As Object, e As EventArgs) Handles Btn7.Click
Select Case myBtn7
Case False
P7.BackColor = Color.Green
myBtn7 = True
sendCom("J")
Case True
P7.BackColor = Color.Red
myBtn7 = False
sendCom("R")
End Select
pinFlip(7, myBtn7)
End Sub
结束类
【问题讨论】:
-
那里有一大堆代码,似乎没有什么与尝试从串行端口读取数据相关。也许从官方文档开始,它有一个相当不错的例子,关于从串行端口读取/写入和处理事件docs.microsoft.com/en-us/dotnet/api/…
标签: vb.net serial-port port msp430