バランスWiiボード(WiiFit)とWiiリモコンを同時に使う方法を解説します。
Wiiリモコン 複数台の制御の時と同じ方法を使ってWiiFitとWiiリモコンを同時に制御する事ができます。
WiiFitのLEDやボタンの使用方法は前回の記事を参照してください。
Wiiリモコン 複数台の制御の時と同じ方法を使ってWiiFitとWiiリモコンを同時に制御する事ができます。
WiiFitのLEDやボタンの使用方法は前回の記事を参照してください。
1.WiiFitとWiiリモコンをBluetoothで認識させる
WiiFitとWiiリモコンをBluetoothでPCに接続します。
※スタックによっては同時に接続できないものもあるようです。
2.フォームの作成
1.前回と同じくフォームにプロジェクトを作成し、ボタンを2つフォームに貼り付けます。
![]()
2.各ボタンをダブルクリックし、ボタンクリックイベントを登録します。
3.WiiFit Wiiリモコン同時制御プログラム
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 WiimoteLib_Sample { public partial class Form1 : Form { public int Conect = 0; //接続数を格納 public WiimoteCollection wc = null; //WiimoteCollectionの宣言 public Boolean Button = false; //Wiiリモコンボタン押下フラグ WiimoteLib.ExtensionType RemoteType = new ExtensionType();//拡張コントローラータイプ public Form1() { InitializeComponent(); //他スレッドからのコントロール呼び出し許可 Control.CheckForIllegalCrossThreadCalls = false; this.wc = new WiimoteLib.WiimoteCollection(); //WiimoteCollectionを生成 } //接続ボタンが押されたら private void button1_Click(object sender, EventArgs e) { this.Conect = 0; //接続数を初期化 this.wc.FindAllWiimotes(); //Wiiリモコン登録を調べる foreach (WiimoteLib.Wiimote wm in wc) { //Wiiリモコンが見つかった回数だけ繰り返す try { wm.Connect(); //接続 wm.SetReportType(WiimoteLib.InputReport.IRAccel, true);//レポートタイプの設定 switch (this.Conect) { case 0: wm.WiimoteChanged += wm_WiimoteChanged_01; //イベント設定 break; case 1: wm.WiimoteChanged += wm_WiimoteChanged_02; //イベント設定 break; } this.Conect++;//カウント++ } catch { } } } //切断ボタンが押されたら private void button2_Click(object sender, EventArgs e) { if (this.wc != null) { foreach (WiimoteLib.Wiimote wm in wc) { //Wiiリモコンが見つかった回数だけ繰り返す wm.Disconnect(); //接続を切る } this.wc.Clear(); //クリア } } //Wiiリモコンの値が変化したときに呼ばれる関数 void wm_WiimoteChanged_01(object sender, WiimoteChangedEventArgs args) { //WiimoteStageの値を取得 WiimoteState ws = args.WiimoteState; //WiiFitの値を読み取る RemoteType = ws.ExtensionType;//拡張コントローラーの種類を入れる //バランスボードが接続されていて、かつボタン押下フラグがtrueなら実行 if (RemoteType == ExtensionType.BalanceBoard && this.Button == true) { this.label1.Text = "測定中:" + ws.BalanceBoardState.WeightKg + "Kg"; } else { this.label1.Text = "停止中"; } } //Wiiリモコンの値が変化したときに呼ばれる関数 void wm_WiimoteChanged_02(object sender, WiimoteChangedEventArgs args) { //WiimoteStageの値を取得 WiimoteState ws = args.WiimoteState; //WiiリモコンのAボタンが押されていればボタン押下フラグをtrueにする if (ws.ButtonState.A) { this.Button = true; } else { this.Button = false; } } } }
実行
1.WiiFit、Wiiリモコンの順に接続してください。接続の方法はWiiリモコンと同じです。
2.F5キーを押して実行してください。
※もしエラーが発生する場合はWiiFit・Wiiリモコンが正しく接続されているか確認してください。3.フォームの接続ボタンを押し、接続します。
4.接続が成功したらラベルの表示が「停止中」に変わります。
![]()
この状態ではWiiFitに乗っても何も変化はありません。
![]()
5.次にWiiリモコンのAボタンを押します。
するとラベルの表示が「測定中:○○Kg」に変わり、重さの測定が開始されます。
![]()
6.終了する際は、切断を押しフォームを閉じてください。
解説
WiiリモコンのAボタンを押すことで、WiiFitの重さ測定機能をON/OFFできます。
ws.ExtensionType接続されている拡張コントローラーのタイプが取得できます。ws.BalanceBoardState.WeightKg
WiiFitが接続されている場合は[ExtensionType.BalanceBoard]となります。
片方のWiiリモコンの処理の部分へWiiFitの場合だけ実行する処理を記述することで、WiiFitとWiiリモコンを同時に制御することが可能になります。WiiFitにかかる重さをキログラムで出力します。

