ヌンチャクを使ったプログラミングを行っていきます。ヌンチャクにはWiiリモコンと同じく3軸加速度センサ、Cボタン、Zボタン、3Dスティックが内蔵されています。

1.フォームの作成
フォームの作成 フォームにラベルを6つ、ピクチャーボックスを1つ貼り付けてください。
ピクチャーボックスのサイズは255,255とします。
2.ヌンチャクデモプログラム
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; this.label6.Text = "ヌンチャク未接続"; //イベント関数の登録 wm.WiimoteChanged += wm_WiimoteChanged; //拡張コネクタの接続イベントの登録 wm.WiimoteExtensionChanged += wm_WiimoteExtensionChanged; //Wiimoteの接続 wm.Connect(); } void wm_WiimoteExtensionChanged(object sender, WiimoteExtensionChangedEventArgs args) { if (args.ExtensionType == ExtensionType.Nunchuk) { this.label6.Text = "ヌンチャク接続"; } else if (args.ExtensionType == ExtensionType.None) { this.label6.Text = "ヌンチャク未接続"; } } //Wiiリモコンの値が変化したときに呼ばれる関数 void wm_WiimoteChanged(object sender, WiimoteChangedEventArgs args) { WiimoteState ws = args.WiimoteState; //WiimoteStateの値を取得 //ヌンチャク接続中であれば if (ws.ExtensionType == ExtensionType.Nunchuk) { Graphics g = this.pictureBox1.CreateGraphics(); //pictureBox1のグラフィックスを取得 g.Clear(Color.Black); //画面を黒色にクリア //ピクチャーボックスへアナログスティックの描画 float x = ws.NunchukState.RawJoystick.X; //X座標 float y = 256 - ws.NunchukState.RawJoystick.Y; //Y座標 //赤色でマーカを描写 g.FillEllipse(Brushes.Red, x, y, 10, 10); g.Dispose(); //グラフィックスを開放 //加速度 this.label1.Text = "X軸:" + (ws.NunchukState.AccelState.Values.X.ToString("0.0") ); //加速度 X this.label2.Text = "Y軸:" + (ws.NunchukState.AccelState.Values.Y.ToString("0.0") ); //加速度 Y this.label3.Text = "Z軸:" + (ws.NunchukState.AccelState.Values.Z.ToString("0.0")); //加速度 Z //Cボタン if (ws.NunchukState.C == true) { this.label4.Text = "Cボタン:オン"; } else { this.label4.Text = "Cボタン:オフ"; } //Zボタン if (ws.NunchukState.Z == true) { this.label5.Text = "Zボタン:オン"; } else { this.label5.Text = "Zボタン:オフ"; } } } } }
3.実行
1.ヌンチャクを接続したWiiリモコンをPCに接続してください
2.F5を押して実行してください

3.ヌンチャクを振り回すことで、加速度が変化します
4.スティックを動かすことで、ピクチャーボックスの赤い点が移動します
5.ボタンを押すことで、ラベルの文字が変わります
6.ヌンチャクをWiiリモコンから抜き差しすることで、接続・未接続が切り替わります。
4.解説
ヌンチャクの各状態をラベル、ピクチャーボックスに表示しています。
wm.WiimoteExtensionChanged += wm_WiimoteExtensionChanged;
ヌンチャクを繋いだ時や、抜いたときに発生するイベントを登録します
ws.NunchukState.RawJoystick.X
ws.NunchukState.RawJoystick.Y
スティックの傾きを30~230の間で出力します。本来ならばNunchukState.Joystick.X,.Yを使うべきですが、今回使用したWiimoteLibVer1.7では値が常に0になるバグ(?)があるようなのでRawJoystickを使用しています。
ws.NunchukState.AccelState.Values.X
ws.NunchukState.AccelState.Values.Y
ws.NunchukState.AccelState.Values.Z
ヌンチャクの加速度センサの値を約-3.0~+3.0の間で出力します。
ws.NunchukState.C
ws.NunchukState.Z
C、Zボタンが押されていればtrue、押されていなければfalseを返します。

