「WiimoteLibを使う」第二話~ボタン情報の取得~
2015/10/24
Wiiリモコンの状態、手始めに「ボタンが押されているかどうか」の情報を取得してみようと考えた。
書籍WiiRemoteプログラミングP123~を参考に、VBで書いてみる…も、うまくいかず断念。
基本的には「WiimoteLib.dll付属のVBサンプルソースを読み解きながら、できる限り削って、必要な部分のみを残してみよう」に、方針を転換。
結果のソースはこんな感じ。
Imports Microsoft.VisualBasic
Imports System
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Windows.Forms
Imports WiimoteLib
Public Class Form1
Private Delegate Sub UpdateWiimoteStateDelegate(ByVal args As WiimoteChangedEventArgs)
Private wm As New Wiimote
Public Sub New()
InitializeComponent()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
wm.Connect()
wm.SetReportType(InputReport.Buttons, True)
wm.SetLEDs(False, True, True, False)
AddHandler wm.WiimoteChanged, AddressOf wm_WiimoteChanged
End Sub
Private Sub wm_WiimoteChanged(ByVal sender As Object, ByVal args As WiimoteChangedEventArgs)
UpdateState(args)
End Sub
Public Sub UpdateState(ByVal args As WiimoteChangedEventArgs)
BeginInvoke(New UpdateWiimoteStateDelegate(AddressOf UpdateWiimoteChanged), args)
End Sub
Private Sub UpdateWiimoteChanged(ByVal args As WiimoteChangedEventArgs)
Dim ws As WiimoteState = args.WiimoteState
CheckBox1.Checked = (ws.ButtonState.A)
CheckBox2.Checked = (ws.ButtonState.B)
CheckBox3.Checked = (ws.ButtonState.One)
CheckBox4.Checked = (ws.ButtonState.Two)
Label4.Text = Int(ws.Battery)
ProgressBar1.Value = ws.Battery
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles MyBase.FormClosing
wm.SetLEDs(False, False, False, False)
wm.Disconnect()
End Sub
End Class
落し物
サンプルプログラム:Wiiボタン←右クリック+対象をファイルに保存
サンプルソース:wiitest06s.zip←右クリック+対象をファイルに保存
ちょっとした覚書
15 wm.SetReportType(InputReport.Buttons, True)
レポートタイプのセット。Wiimoteはいくつかのモードがある。帯域や通信速度を効率的に使うためとみられる。(出典:WiiRemoteプログラミング)ここでは、ボタン情報を返す(と思われる)モードにセットしてみる。
17 AddHandler wm.WiimoteChanged, AddressOf wm_WiimoteChanged
Wiimoteの状態が変化したときに、wm_WiimoteChangedを呼び出します。
18-26 wm_WiimoteChangedの呼び出しは、結果的にUpdateWiimoteChangedの呼び出しにつながって…
27 Dim ws As WiimoteState = args.WiimoteState
Wiimote状態を、wsに”格納”する。
28-31 ボタンの状態に応じてチェックボックスにチェックを入れる。
32-33 バッテリーの状態を表示。生データの扱いがこれでいいのか不明。適当!
VB2010で「デバッグ開始」すると、エラーメッセージが。原因はよくわからず。またおいおい。
内部リンク
WiimoteLibを使ってみる。に戻る
「WiimoteLibを使う」第三話~加速度計再び~ →進む
戻る← 「WiimoteLibを使う」第一話~WiimoteLib入門+リモコンの接続~