別棟備忘録4

*

Wiiリモコンで計る距離 第3話データロガー化

      2015/10/25

こちらのエントリでは、リアルタイムにグラフを描画する予行演習を行った。WiiZahyouにそれを応用し、位置座標センサー&データロガーっぽくするエントリ。
デザインの変更。従来のボタン群は残したうえで…
Wiitest12v10.jpg
1.グラフを描画するPictureBoxを配置。
2.数値入力+接待ボタンで、縦軸横軸のスケール変更を可能に。
3.距離表示にZERO-setボタンを装備。
・ソースの要点・

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height)
g = Graphics.FromImage(PictureBox1.Image)
g.Clear(Color.White)
‘グラフの目盛り線の描画
For i = 0 To 4
g.DrawLine(Pens.Black, 0, 75 * i, 440, 75 * i)
g.DrawLine(Pens.Black, 110 * i, 0, 110 * i, 300)
g.DrawLine(Pens.Gray, 110 * i + 55, 0, 110 * i + 55, 300)
Next
End Sub

初めにNewBitmapの準備+目盛り線引いておきます。

Private Sub Bt_Yset_Click(sender As System.Object, e As System.EventArgs) Handles Bt_Yset.Click
Lb_Y01.Text = Int(TB_00.Text + (CInt(TB_01.Text) – CInt(TB_00.Text)) * 1 / 4)
Lb_Y02.Text = Int(TB_00.Text + (CInt(TB_01.Text) – CInt(TB_00.Text)) * 2 / 4)
Lb_Y03.Text = Int(TB_00.Text + (CInt(TB_01.Text) – CInt(TB_00.Text)) * 3 / 4)
End Sub
Private Sub Bt_Xset_Click(sender As System.Object, e As System.EventArgs) Handles Bt_Xset.Click
Lb_X01.Text = Int((TB_02.Text) / 4)
Lb_X02.Text = Int((TB_02.Text) * 2 / 4)
Lb_X03.Text = Int((TB_02.Text) * 3 / 4)
End Sub

テキストに数字を入れて、設定ボタンを押す。各Labelに、1/4の値を入れまして。

Private Sub Bt_ksave_Click(sender As System.Object, e As System.EventArgs) Handles Bt_ksave.Click
If ksave = False Then
Bt_ksave.Text = "記録中"
Bt_ksave.BackColor = Color.Pink
ksave = True
j = 0
y = 0
old_j = 0
old_y = 300 – ((Int(Label2.Text) – TB_00.Text) * 300 / (TB_01.Text – TB_00.Text))
g.Clear(Color.White)
For i = 0 To 4
g.DrawLine(Pens.Black, 0, 75 * i, 440, 75 * i)
g.DrawLine(Pens.Black, 110 * i, 0, 110 * i, 300)
g.DrawLine(Pens.Gray, 110 * i + 55, 0, 110 * i + 55, 300)
Next
startTime2 = timeGetTime()
Else
Bt_ksave.Text = "グラフ記録"
Bt_ksave.BackColor = Color.Silver
ksave = False
End If
End Sub

簡易記録ボタンが押された時の処理。グラフをさらにして線を引き直し、時間軸と位置座標軸のそれぞれ_oldの値を放り込む。ksaveをTrueに。

If ksave = True Then
timeCount2 = timeGetTime() – startTime2
y = 300 – ((Int(Label2.Text) – TB_00.Text) * 300 / (TB_01.Text – TB_00.Text))
j = timeCount2 * 440 / TB_02.Text
g.DrawLine(RED_Pen, old_j, old_y, j, y)
PictureBox1.Refresh()
old_y = y
old_j = j
End If

タイマーのところに追記。ksave=Trueのとき、縦横値を調節して線を引く。
どんな感じのグラフが描画されるか例1「単振動」
単振動実験風景
こんな感じで吊るして、振幅6cm位で揺らします。すると、得られるグラフはこんな感じ。
WiiZahyou.jpg
…ちょっと変位の値がバグっていますが…。
台車に置くなどして、あんまりWiiリモコンがねじれないようにすると、いい感じでグラフ描画ができる感じ。


・とにかく試用の落し物・
サンプルプログラム:WiiZahyou2.zip←右クリック+対象をファイルに保存
サンプルソース一式:WiiZahyou2s.zip←右クリック+対象をファイルに保存


***********「Wiiリモコン座標計」  幕************

 - Wiiリモコン→座標計