比较串行输入以执行操作

时间:2016-12-06 17:29:54

标签: vb.net arduino serial-port

我相信这应该非常简单,但是为什么它不能正常运转我的大脑。我正在使用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

我不明白为什么简单的字符串比较不起作用。感谢您对此的任何帮助。

2 个答案:

答案 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只会发送您想要查看的字符,并省略两个新的行字节。