2016-12-06 14 views
0

我相信這應該非常簡單,但是我已經絞盡腦汁,爲什麼它不起作用。我正在使用Arduino向串行端口發送「O」和「C」。我想在發送「O」時執行一個子操作,而在發送「C」時執行另一個子操作。我可以用這個確認「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」。但我不能夠做到這一點所有..我不能得到這個工作(這個問題是一些與選擇-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

檢查「數據」是否包含多個單個字符。如果它有一個尾隨空白或一個不可打印的字符,當你將它顯示在你的測試用例的'MessageBox'中時,你不會注意到它。 – Blackwood

+0

好的。我沒有想到要那樣做。我在這個Sub的結尾加了一個停止符號,並觀看了當地人。它具有「O」&vbCr數據。我必須瞭解vbCr現在的含義,但是我對代碼做了這些,現在它可以工作。 – Sloan

+0

私人小組SerialPort1_DataReceived(發送者爲對象,例如作爲IO.Ports.SerialDataReceivedEventArgs)處理SerialPort1.DataReceived 昏暗數據作爲字符串= SerialPort1.ReadLine() 選擇案例數據 案例 「O」 &VBCR 打開() 案「 C「&vbCr close() End Select End Sub – Sloan

回答

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),你將需要更多的代碼,但你需要的代碼依賴於可能的值是什麼。

0

如果您只是從Arduino發送一個字符到串行主機,請使用Serial.print('C')而不是Serial.println('C')發送它。這樣,Arduino只會發送你想要查看的字符,並省略兩個新的行字節。