前提・実現したいこと
初歩的なことかもしれませんが、シリアル通信で”S”を受け取って数字のカウンティングを開始し、”P”を受け取ったタイミングで終了したいと思っています。
発生している問題・エラーメッセージ
発生している問題としては、”P”を受信しても止まらないことです。
該当のソースコード
vb
1Public Class Form1 2 Private receive As String 3 Private f As Boolean 4 5 Private Sub FormLoad(sender As Object, e As EventArgs) Handles MyBase.Load 6 With SerialPort1 7 'シリアルポートの設定 8 .PortName = "COM3" 'ポート名 9 .BaudRate = 9600 '通信速度指定 10 .Parity = IO.Ports.Parity.None 'パリティ指定 11 .DataBits = 8 'ビット数指定 12 .StopBits = IO.Ports.StopBits.One 'ストップビット指定 13 'シリアルポートのオープン 14 .Open() 15 End With 16 f = True 17 End Sub 18 'シリアルポート受信イベント 19 Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived 20 'データ受信 21 Console.WriteLine("受信") 22 Dim arrByte As Byte() = New Byte(SerialPort1.BytesToRead - 1) {} '受信バッファー内のデータのバイト数分 23 'SerialPort の入力バッファーからバイト数を読み取り 24 SerialPort1.Read(arrByte, 0, arrByte.GetLength(0)) 25 'デリゲート生成 26 Dim dlg As New DisplayTextDelegate(AddressOf Check) 27 '受信バイト配列を文字列変換 28 receive = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetString(arrByte) 29 'デリゲート関数をコールする 30 Me.Invoke(dlg, New Object()) 31 End Sub 32 33 Delegate Sub DisplayTextDelegate(ByVal strDisp As Object) 34 35 Private Sub Check() 36 Console.WriteLine("受信:" & receive) 37 Select Case receive 38 Case "S" 39 Counting() 40 41 Case "P" 42 f = False 43 End Select 44 End Sub 45 Private Sub Counting() 46 Dim n As Integer = 0 47 48 While n < 10000 49 If f = True Then 50 Threading.Thread.Sleep(1000) 51 n = n + 1 52 Console.WriteLine(n) 53 Else 54 Exit Sub 55 End If 56 End While 57 End Sub 58End Class
試したこと
受信した文字を表示して試したところ”S”を受信した後は何も受け取っておらず、止めることができないでいるようです。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/17 01:58