首页 > 解决方案 > 如何检查接收到的字符串中的特定单词?

问题描述

我正在将字符串“end”从我的 arduino uno 发送到 vb.net 应用程序。我希望 vb.net 应用程序能够识别单词并执行特定操作。我可以看到控制台中正在接收该单词,但代码似乎无法识别它。

Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    Console.WriteLine(SerialPort1.ReadExisting)
    If SerialPort1.ReadExisting IsNot "end" Then
        dataRxd = dataRxd & SerialPort1.ReadExisting
    Else
        txtRx.Text &= dataRxd
        Console.WriteLine("###############")
        Console.WriteLine(dataRxd)

        'Dim result As newData = JsonConvert.DeserializeObject(Of newData)(dataRxd)
        'Dim com As result.com

        'SerialPort1.Close()
        'MySqlConn = New MySqlConnection
        'MySqlConn.ConnectionString = "server=localhost;userid=root;password=g4rg45m3ll1;database=tags"
        'Try
        '    Dim SDA As New MySqlDataAdapter
        '    Dim dbDataSet As New DataTable
        '    Dim bSource As New BindingSource
        '    MySqlConn.Open()
        '    'Query = "update tags.tags_read set LastRead= now() where TagID='" & dataRxd & "';"
        '    Query = "insert into tags.tags_read values ('" & dataRxd & "', now());"
        '    cmd = New MySqlCommand(Query, MySqlConn)
        '    reader = cmd.ExecuteReader
        'Catch ex As MySqlException
        '    MessageBox.Show(ex.Message)
        'End Try
        'MySqlConn.Dispose()
        'MySqlConn.Close()
        'SerialPort1.Open()
    End If
End Sub

这是 vb.net 应用程序接收到的数据示例,显示正在接收该词:

0001220000570221001B end 0001220000570221001B end 线程 0x4a70 已退出,代码为 0 (0x0)。

标签: vb.netarduino

解决方案


ReadExisting是一种方法,而不是一种属性。如果您调用它一次,那么您正在读取现有数据,因此没有更多数据。您不能再次调用它并获得相同的数据。如果您希望使用多次读取的数据,则应始终按此操作:将方法结果分配给变量,然后根据需要使用该变量。

Dim msg = SerialPort1.ReadExisting()

Console.WriteLine(msg)
If msg <> "end" Then
    dataRxd = dataRxd & msg

请注意,我也使用<>了而不是IsNot,因为它确实是您关心的价值平等而不是引用平等。


推荐阅读