2016-12-06 8 views
0

これは非常にシンプルであるべきだと私は考えていますが、私の脳はなぜ機能していないのかを突き止めました。私は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

私はその文字列を取ることができると私は望んでいたサブルーチンを実行することが期待しましたdata = "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

'data'が複数の文字で構成されているかどうかを確認してください。末尾の空白や印字不能な文字がある場合は、テストケースの 'MessageBox'に表示する際に気付かないでしょう。 – Blackwood

+0

私はそれをするとは思わなかった。私はこのSubの最後に停止を追加し、地元の人を見ました。データには "O"&vbCrがありました。私は&vbCrが現在何を意味するのかを知る必要がありますが、私はこれを私のコードに行いました。 – Sloan

+0

ます。Private Sub SerialPort1_DataReceived(オブジェクトとして送信者、IO.Ports.SerialDataReceivedEventArgsとして、e)は文字列= SerialPort1.ReadLine() のSelect Caseデータ ケース "O" としてSerialPort1.DataReceived 点心データを処理&vbCr オープン() ケース」 C "&vbCr close() End Select End Sub – Sloan

答えて

0

vbCrは、行の終わりを示す「キャリッジリターン」の文字です。 vbCrの前に常に1文字があることがわかっている場合は、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 

返されたデータを1つの文字(プラスvbCr)であることが保証されていない場合、あなたはより多くのコードが必要になりますが、あなたが必要となるコードは、可能な値が何であるかに依存します。

0

Arduinoからシリアルホストに1文字を送る場合は、Serial.println('C')ではなくSerial.print('C')としてください。そうすれば、Arduinoはあなたが見たいキャラクターだけを送り、2つの新しい行バイトを省略します。

関連する問題