KOSAKA LABORATORY->Tips

wiiリモコン 赤外線カメラ その2

 次にWiiリモコンの赤外線カメラを用いた応用プログラミングを行っていきます。 WiimoteLibには同時に4点までの赤外線を計測することができます。先のプログラムでは1点以上計測されると振動するようにしました。
今回は、現在、何点まで赤外線を検出できたかを、LEDに表示するプログラムを追加します

1.接続、切断ボタンの追加
1.フォームにボタンを2つ張り付けてください。

2.貼り付けたbutton1のプロパティのTextを「接続」に、button1のプロパティのTextを「切断」に設定する。


2.接続、切断ボタンイベントの追加
1.接続をボタンをダブルクリックし、以下のプログラムを追加する。
        //接続ボタンが押されたら
        private void button1_Click(object sender, EventArgs e) {
           this.wm.Connect();                                        //Wiimoteの接続
           this.wm.WiimoteChanged += wm_WiimoteChanged;              //イベント関数の登録
           this.wm.SetReportType(InputReport.IRExtensionAccel, true);//レポートタイプの設定
        }
2.切断をボタンをダブルクリックし、以下のプログラムを追加する。
        //切断ボタンが押されたら
        private void button2_Click(object sender, EventArgs e) {
           this.wm.Disconnect();                                     //Wiimote切断
        }
3.Wii赤外線検出プログラム
Form1.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 WiimoteLib_Sample {
    public partial class Form1: Form {


        Wiimote wm = new Wiimote();                                    //Wiimoteの宣言

        public Form1() {


            InitializeComponent();

            //他スレッドからのコントロール呼び出し許可
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        //接続ボタンが押されたら
        private void button1_Click(object sender, EventArgs e) {

            this.wm.Connect();                                        //Wiimoteの接続
            this.wm.WiimoteChanged += wm_WiimoteChanged;              //イベント関数の登録
            this.wm.SetReportType(InputReport.IRExtensionAccel, true);//レポートタイプの設定


        }

        //切断ボタンが押されたら
        private void button2_Click(object sender, EventArgs e) {

            this.wm.Disconnect();                                     //Wiimote切断
            this.wm.Dispose();
        }



        //Wiiリモコンの値が変化する度に呼ばれる
        void wm_WiimoteChanged(object sender, WiimoteChangedEventArgs args) {
            WiimoteState ws = args.WiimoteState;                 //WiimoteStateの値を取得

            //もし赤外線を1つ発見したら
            if (ws.IRState.IRSensors[0].Found) {
                wm.SetRumble(true);     //バイブレータON
            } else {
                wm.SetRumble(false);    //バイブレータOFF
            }

            //検出された赤外線個数をWiiリモコンのLEDに表示する
            try {
                wm.SetLEDs(ws.IRState.IRSensors[0].Found, ws.IRState.IRSensors[1].Found,
                            ws.IRState.IRSensors[2].Found, ws.IRState.IRSensors[3].Found);
            } catch { }

        }



    }
}

実行

1.WiiRemoteを接続してください。

2.F5キーを押して実行してください。

3.接続ボタンを押してください。
  ※もしエラーが発生する場合はWiiRemoteが正しく接続されているか確認してください。

4.WiiリモコンをWiiセンサーバーに向けてください。
 ※センサーバーがない場合は、赤外線が発生するもの(太陽、ロウソクの火、テレビのリモコン、携帯電話の赤外線通信 など)に向けてください。

解説

 Wiiリモコンの赤外線カメラの値を取得して、赤外線を発見したらバイブレータをONにします。LEDに赤外線検出個数を表示します。

 複数の赤外線が見つからない場合は、日中(太陽に向けるなど)に窓の外に向けると複数の赤外線を検出できると思います。