バランスWiiボード(Wii Fit)を使ったプログラミングを行っていきます。
WiiFitには4つのフォースセンサが内蔵されており、重さや重心の位置を知ることができます。
ここでは、ピクチャーボックスに重心の位置を表示し、ラベルに重さを表示するプログラムを作成します。

1.WiimoteLibの準備
Wiiリモコンと同じく、WiimoteLibの準備を行います。
2.フォームの作成
1.フォームにラベルを3つ、ボタンを2つ貼り付けてください。
ボタンのテキストはそれぞれ「接続」、「切断」とします。
また、ピクチャーボックスを1つ貼り付けてください。
ピクチャーボックスのサイズは400,240とします。
2.各ボタンをダブルクリックし、ボタンクリックイベントを登録します。
3.WiiFitデモプログラム
Forn1.csに以下の部分を追加するusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using WiimoteLib; //WimoteLibの宣言 namespace WiiFitTest { public partial class Form1 : Form { Wiimote wm = new Wiimote(); public Form1() { InitializeComponent(); //他スレッドからのコントロール呼び出し許可 Control.CheckForIllegalCrossThreadCalls = false; } private void button1_Click(object sender, EventArgs e) { //Wiimoteの接続 this.wm.Connect(); //イベント関数の登録 this.wm.WiimoteChanged += wm_WiimoteChanged; } private void button2_Click(object sender, EventArgs e) { this.wm.Disconnect();//Wiiリモコンを切断 } void wm_WiimoteChanged(object sender, WiimoteChangedEventArgs args) { //WiimoteStateの値を取得 WiimoteState ws = args.WiimoteState; //ピクチャーボックスへ描画 this.DrawForms(ws); //ラベル //重さ(Kg)表示 this.label1.Text = ws.BalanceBoardState.WeightKg + "kg"; //重心のX座標表示 this.label2.Text = "X:" + ws.BalanceBoardState.CenterOfGravity.X; //重心のY座標表示 this.label3.Text = "Y:" + ws.BalanceBoardState.CenterOfGravity.Y; } //フォーム描写関数 public void DrawForms(WiimoteState ws) { //pictureBox1のグラフィックスを取得 Graphics g = this.pictureBox1.CreateGraphics(); g.Clear(Color.Black); //画面を黒色にクリア //X、Y座標の計算 float x = (wm.WiimoteState.BalanceBoardState.CenterOfGravity.X + 20.0f) * 10; //表示位置(X座標)を求める float y = (wm.WiimoteState.BalanceBoardState.CenterOfGravity.Y + 12.0f) * 10; //表示位置(Y座標)を求める //赤色でマーカを描写 g.FillEllipse(Brushes.Red, x, y, 10, 10); g.Dispose(); //グラフィックスを開放 } } }実行
1.WiiFitを接続してください。接続の方法はWiiリモコンと同じです。
2.F5キーを押して実行してください。
※もしエラーが発生する場合はWiiFitが正しく接続されているか確認してください。
3.接続ボタンを押し、WiiFitに乗ってください。
重心の位置が赤い点で表されます
4.終了する際は、切断を押しフォームを閉じてください。
解説
WiiFitの重心位置を赤色のマーカで表しています。
ws.BalanceBoardState.CenterOfGravity.X重心のX座標を約-20.0f~20.0の幅で出力します。ピクチャボックスのサイズに合わせるため、20.0をプラスして10を掛けてます。ws.BalanceBoardState.CenterOfGravity.Y重心のX座標を約-12.0f~12.0の幅で出力します。ピクチャボックスのサイズに合わせるため、12.0をプラスして10を掛けてます。ws.BalanceBoardState.WeightKgWiiFitにかかる重さをキログラムで出力します。




