我相信这应该是非常简单的,但我绞尽脑汁地想为什么它不起作用。我使用Arduino将"O“和"C”发送到串行端口。我想在发送"O“时执行一个sub,在发送"C”时执行另一个sub。我可以使用以下命令确认正在发送"O“和"C”,它们是字符串:
Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim data As String = SerialPort1.ReadLine()
MessageBox.Show(data)
MessageBox.Show(data.GetType.ToString)
End Sub
我希望能够获得该字符串,并根据data = "O“或"C”来运行我想要的子例程。但是我根本不能这样做..我不能让它工作(问题出在select-case语句中):
Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim data As String = SerialPort1.ReadLine()
Select Case data
Case "O"
open()
Case "C"
close()
End Select
End Sub
我不明白为什么简单的字符串比较不起作用。感谢你在这方面的帮助。
发布于 2016-12-07 04:47:01
vbCr是表示行结束的“回车符”字符。如果您知道vbCr之前总是有一个字符,则可以使用SubString方法让Select Case只检查该字符。
Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim data As String = SerialPort1.ReadLine()
Select Case data.SubString(0, 1)
Case "O"
open()
Case "C"
close()
End Select
End Sub如果不能保证返回的数据是一个字符(加上vbCr),则需要更多的代码,但所需的代码取决于可能的值。
发布于 2016-12-07 20:43:38
如果您只是从Arduino向串行主机发送一个字符,请使用Serial.print('C')而不是Serial.println('C')发送它。这样,Arduino将只发送您想要查看的字符,并省略两个新的行字节。
https://stackoverflow.com/questions/41001369
复制相似问题