Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
時間ごとにデータを保存する方法
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30285#CommentId83042
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
vb素人
 (学生)
投稿日時
2017/9/8 16:32:22
魔界の仮面弁士さま
ありがとうございます。
教えていただいた方法でトライしてみました。
まず、グローバル変数を用意して、
Private xdata As Double
Private ydata As Double
シリアル通信で受信したデータをグローバル変数に渡します。(☆の部分)
①
Private Delegate Sub Delegate_RcvXDataToTextBox(xdec As String)
Private Delegate Sub Delegate_RcvYDataToTextBox(ydec As String)
②
Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
'細かい所は省略します
Dim datax As Byte() = {bin(2), bin(1)}
Dim x As UShort = BitConverter.ToUInt16(datax, 0) '符号なし2 バイト整数に変換
Dim datay As Byte() = {bin(4), bin(3)}
Dim y As UShort = BitConverter.ToUInt16(datay, 0) '符号なし2 バイト整数に変換
Received(x, y)
End Sub
③
Private Sub Received(x As UShort, y As UShort)
If InvokeRequired Then
Invoke(New Action(Of UShort, UShort)(AddressOf Received), x, y)
Else
'グラフの設定などは省略
'☆
xdata = 1023 - x
ydata = 1023 - y
End If
End Sub
このあと、↓の④でなんとなくできました。
↓の内容ですが、TextBoxでデータを保存する数を指定しています。
その後、0.1秒おきにタイマーイベントを発生させて、残りのデータが0になったらファイルへの書き込みを終了させます。
④
Dim CountData As Integer
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
CountData = CInt(TextBox1.Text)
Timer1.Interval = 100
Timer1.Enabled = True
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
CountData = CountData - 1
timeLabel.Text = "残り" & CountData & "個"
'Saveコード
Dim sw As System.IO.StreamWriter
sw = New System.IO.StreamWriter("accel.csv", True,
System.Text.Encoding.GetEncoding(932))
sw.WriteLine(xdata & "," & ydata)
sw.Close()
If CountData = 0 Then
Timer1.Enabled = False
MessageBox.Show("測定終了")
End If
End Sub
これで時間ごとにデータを保存することはできました。
次のステップとして、
①時間もファイルに書き込む
②時間を横軸としてx,yのデータをグラフに表示させる(オシロスコープみたいなイメージ)
①についてTimer1.Tickの中で、0.1秒ずつ加算していけばできると思い、
Dim time As Double
time += 0.1
を書いてみたのですが、保存されるtimeは0.1のまま変化がありません。
初歩的な間違いだと思うのですが、教えていただけると助かります。