我相信这应该非常简单,但是为什么它不能正常运转我的大脑。我正在使用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
我希望能够根据数据=“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
我不明白为什么简单的字符串比较不起作用。感谢您对此的任何帮助。
答案 0 :(得分:0)
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),则需要更多代码,但您需要的代码取决于可能的值。
答案 1 :(得分:0)
如果您只是从Arduino向串行主机发送一个字符,请使用0
而不是Serial.print('C')
发送。这样,Arduino只会发送您想要查看的字符,并省略两个新的行字节。