Wiiリモコンを使ってみるテスト

この辺を参考にして、Wiiリモコンを.NETから使ってみるテスト(・∀・)


使い方としてはこんな感じです。
まず、WiimoteクラスのインスタンスとMutexをFormのメンバ変数に用意。
MutexはWiimoteクラスからのイベント時の排他に使用。

// インスタンス作成
Wiimote wm = new Wiimote();
// イベントの排他制御用
Mutex mutex = new Mutex();

初期化としては、イベントハンドラの登録と接続、バッテリー状態取得の開始とか。

// イベント登録
wm.OnWiimoteChanged += new WiimoteChangedEventHandler(OnWiimoteChanged);

// 接続
wm.Connect();

// バッテリー取得開始
wm.GetBatteryLevel();

これでWiiリモコンの状態がOnWiimoteChanged()にあがるようになります。
で、終了処理はDisconnect()で。

// 切断
wm.Disconnect();

イベントの処理はこんな感じで。

// イベント
void OnWiimoteChanged(object sender, WiimoteChangedEventArgs args)
{
    mutex.WaitOne();

    // Aボタンの状態
    bool isApressed = args.WiimoteState.ButtonState.A;
...

    mutex.ReleaseMutex();
}

Mutexを使っているのは、この処理は非同期読み取りのスレッドプールから呼び出されるので、コールバックを呼び出したスレッド間の排他を行うため。
後、スレッドプールのスレッドから呼び出されるので、Form要素を更新する時にはBeginInvoke()すること。


リモコンの状態に関しては、WiimoteStateクラスのメンバに色々定義されているのでそこを参照。


LED設定なんかはこんな感じで。

// LED設定
wm.SetLEDs(false, false, false, false);

Wiimoteクラスの中身は、HIDデバイスにRead/Writeするような実装になってますね。

  • HIDデバイスをCreateFile()してハンドルを取得
  • そのハンドルから作ったFileStreamを非同期で読み取り
  • 受信したデータから状態を更新してOnWiimoteChanged()イベントをあげる
  • LEDの設定等は逆にFileStreamにWrite

っというわけで、この実験をするためだけにWiiリモコンを買ってしまいました。
本体持ってないんですけど〜、金が無いのにまた無駄遣い(´Д`;)


なんか面白い使い道あるかな〜(´ω`)

Wiiリモコン

Wiiリモコン