首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较串行输入以执行操作

比较串行输入以执行操作
EN

Stack Overflow用户
提问于 2016-12-07 01:29:54
回答 2查看 384关注 0票数 1

我相信这应该是非常简单的,但我绞尽脑汁地想为什么它不起作用。我使用Arduino将"O“和"C”发送到串行端口。我想在发送"O“时执行一个sub,在发送"C”时执行另一个sub。我可以使用以下命令确认正在发送"O“和"C”,它们是字符串:

代码语言:javascript
复制
    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语句中):

代码语言:javascript
复制
    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

我不明白为什么简单的字符串比较不起作用。感谢你在这方面的帮助。

EN

回答 2

Stack Overflow用户

发布于 2016-12-07 04:47:01

vbCr是表示行结束的“回车符”字符。如果您知道vbCr之前总是有一个字符,则可以使用SubString方法让Select Case只检查该字符。

代码语言:javascript
复制
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),则需要更多的代码,但所需的代码取决于可能的值。

票数 0
EN

Stack Overflow用户

发布于 2016-12-07 20:43:38

如果您只是从Arduino向串行主机发送一个字符,请使用Serial.print('C')而不是Serial.println('C')发送它。这样,Arduino将只发送您想要查看的字符,并省略两个新的行字节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41001369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档