KOSAKA LABORATORY->Tips

バランスWiiボード(WiiFit)とWiiリモコンを同時に使う

バランスWiiボード(WiiFit)とWiiリモコンを同時に使う方法を解説します。
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
接続されている拡張コントローラーのタイプが取得できます。
WiiFitが接続されている場合は[ExtensionType.BalanceBoard]となります。
片方のWiiリモコンの処理の部分へWiiFitの場合だけ実行する処理を記述することで、WiiFitとWiiリモコンを同時に制御することが可能になります。

ws.BalanceBoardState.WeightKg
WiiFitにかかる重さをキログラムで出力します。