私は、シリアル ポート経由で 1 秒間に約 3 回データを吐き出すセンサー (実際には Quartzonix 圧力変換器) を持っています。サンプルの x 量に基づいて平均読み取り値を取得するコードを設定したいと思います。
出力は次のようになります。
01+ 1.502347091823e01
01+ 1.501987234092e01
01+ 1.50234524524e01
01+ 1.502123412341e01
01+ 1.502236234523e01
01+ 1.50198345e01
01+ 1.502346234523e01
.. そして、com ポートが閉じられるか、変換器が別のコマンドを取得するまで、永遠に続きます。
これは私がこれまでに持っているコードであり、コードはトランスデューサが実際に出力しているものを表示するために機能します:
Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
Dim a As String
a = "$01MC" & Chr(13)
MyComPort.WriteLine(a)
Do
Dim Incoming As String = MyComPort.ReadLine()
Dim incomingtext As String = Incoming.Remove(0, 3)
If Incoming Is Nothing Then
Exit Do
Else
txtRawData.Text = Incoming
boxPSIA.Text = Format(Val(incomingtext), "##0.000")
End If
Application.DoEvents()
Loop
End Sub
「$01MC」は、トランスデューサがデータの吐き出しを開始するために必要なコマンドです。開始ボタンをクリックすると、奇妙なタイムアウトが発生しますが、それは別のショーです (.readtimeout の調整が必要かもしれませんが、よくわかりません)。
平均する測定値の数を入力するためのテキストボックスtxtReadingsToAvgがあります..実際に平均を計算する方法について頭を悩ませているだけではありません(たとえば、ボタンをクリックしてからメッセージボックスに吐き出します) 、または別のテキスト ボックスに)。