Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
シリアル通信の受信データを表示
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30252#CommentId82903
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
vb素人
 (学生)
投稿日時
2017/7/12 11:18:42
魔界の仮面弁士さま
次の送信データに対応したコードが完成しました。
何回か試していますが、一応できていると思われます。
(1つ前の質問における、データの並び順は解決していませんが、とりあえず配列の順番を変えて対応しています。)
私の理解できる範囲で書いているので、長いコードになってしまっています。
[送信データ]
F2 F0 (先頭検出用データ)
x1 x2 (X座標データ 0~10bitの範囲)
y1 y2 (Y座標データ 0~10bitの範囲)
X, Yのデータ毎にText Boxに表示させています。
Private Delegate Sub Delegate_RcvXDataToTextBox(xdec As String)
Private Delegate Sub Delegate_RcvYDataToTextBox(xdec As String)
Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
If Not SerialPort1.IsOpen Then
Return
End If
If SerialPort1.BytesToRead >= 6 Then
Dim bin(5) As Byte
'① 2 バイト取り出して、F2,F0 が連続しているか確認する
SerialPort1.Read(bin, 0, 2)
If bin(0) = &HF2 AndAlso bin(1) = &HF0 Then
'F2-F0-x1-x2-y1-y2 パターン
SerialPort1.Read(bin, 2, 4) 'もう4バイト追加
Dim datax As Byte() = {bin(3), bin(2)}
Dim xbyte As UShort = BitConverter.ToUInt16(datax, 0) '符号なし2 バイト整数に変換
Dim xdec As String = Convert.ToString(xbyte, 10) '10進数表記の "1023" に変換
Invoke(New Delegate_RcvXDataToTextBox(AddressOf RcvXDataToTextBox), xdec)
Dim datay As Byte() = {bin(5), bin(4)}
Dim ybyte As UShort = BitConverter.ToUInt16(datay, 0) '符号なし2 バイト整数に変換
Dim ydec As String = Convert.ToString(ybyte, 10) '10進数表記の "1023" に変換
Invoke(New Delegate_RcvYDataToTextBox(AddressOf RcvYDataToTextBox), ydec)
Return
End If
'3 バイト目を取り出して、F2,F0 が連続しているか確認する
SerialPort1.Read(bin, 2, 1)
If bin(1) = &HF2 AndAlso bin(2) = &HF0 Then
Return
End If
'4バイト目を取り出して、F2,F0 が連続しているか確認する
SerialPort1.Read(bin, 3, 1)
If bin(2) = &HF2 AndAlso bin(3) = &HF0 Then
'y1-y2-F2-F0-x1-x2パターン。
SerialPort1.Read(bin, 4, 2) 'もう2バイト追加
Dim datax As Byte() = {bin(5), bin(4)}
Dim xbyte As UShort = BitConverter.ToUInt16(datax, 0) '符号なし2 バイト整数に変換
Dim xdec As String = Convert.ToString(xbyte, 10) '10進数表記の "1023" に変換
Invoke(New Delegate_RcvXDataToTextBox(AddressOf RcvXDataToTextBox), xdec)
Dim datay As Byte() = {bin(1), bin(0)}
Dim ybyte As UShort = BitConverter.ToUInt16(datay, 0) '符号なし2 バイト整数に変換
Dim ydec As String = Convert.ToString(ybyte, 10) '10進数表記の "1023" に変換
Invoke(New Delegate_RcvYDataToTextBox(AddressOf RcvYDataToTextBox), ydec)
Return
End If
'5 バイト目を取り出して、F2,F0 が連続しているか確認する
SerialPort1.Read(bin, 4, 1)
If bin(3) = &HF2 AndAlso bin(4) = &HF0 Then
'x2-y1-y2-F2-F0(-x1) パターン。
Return
End If