投稿者 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のまま変化がありません。
初歩的な間違いだと思うのですが、教えていただけると助かります。