VS2015のソリューションエクスプローラーの「参照」で右クリック→「参照の追加」を選択する。表示される、参照マネージャーから、「Universal Windows」→「拡張」を選択して表示されるSDKリストから、「Windows IoT Extension for the UWP 10.0.10240.0」にチェックを入れる(図2)。選んだAPIがソリューションエクスプローラーの「参照」内に追加される。
ソリューションエクスプローラーから「JumpScript.cs」ファイルを開く。最初はエラーを示す赤い波線が幾つか表示されるが、気にしなくてもいい。
前述したリスト1のコードを追記修正する(リスト2)。
using UnityEngine;
using System;
using Windows.Devices.Gpio;
public class JumpScript : MonoBehaviour
{
//private GameObject obj;
private bool flag=false;
private Animator anim;
private const int LED_PIN = 79;
private const int BUTTON_PIN = 97;
private GpioPin pin;
private GpioPin buttonPin;
private GpioPinValue pinValue = GpioPinValue.High;
// Use this for initialization
void Start()
{
anim = GetComponent<Animator>();
InitGPIO();
}
void Update()
{
if (flag==true)
{
anim.SetBool("is_jumping", true);
}
else
{
AnimatorStateInfo state = anim.GetCurrentAnimatorStateInfo(0);
if (state.IsName("Locomotion.Jump"))
{
anim.SetBool("is_jumping", false);
}
}
}
private void InitGPIO()
{
var gpio = GpioController.GetDefault();
if (gpio == null)
{
return;
}
buttonPin = gpio.OpenPin(BUTTON_PIN);
pin = gpio.OpenPin(LED_PIN);
pin.Write(GpioPinValue.High);
pin.SetDriveMode(GpioPinDriveMode.Output);
if (buttonPin.IsDriveModeSupported(GpioPinDriveMode.InputPullUp))
buttonPin.SetDriveMode(GpioPinDriveMode.InputPullUp);
else
buttonPin.SetDriveMode(GpioPinDriveMode.Input);
buttonPin.DebounceTimeout = TimeSpan.FromMilliseconds(50);
buttonPin.ValueChanged += buttonPin_ValueChanged;
}
private void buttonPin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e)
{
if (e.Edge == GpioPinEdge.FallingEdge)
{
pinValue = (pinValue == GpioPinValue.Low) ?
GpioPinValue.High : GpioPinValue.Low;
pin.Write(pinValue);
if(pinValue==GpioPinValue.High)
{
flag = true;
}else
{
flag = false;
}
}
}
}
追記修正した「JumpScript.cs」のポイントは以下の通りだ。
ユーザーモードの汎用入出力(GPIO)ピンを使うための型を含むWindows.Devices.Gpio名前空間を読み込む。
ブール型メンバー変数flag、Animatorクラス型のメンバー変数animを宣言する。
赤いジャンパーワイヤーの1つは、SODIMM_79(GPIO)につないであるので、メンバー定数LED_PINを宣言して「79」の値で初期化する(Raspberry Pi 3の場合は「6」となる)。
タクトスイッチは、もう1本の赤色のジャンパーワイヤーを経由してSODIMM_97(GPIO)とつながっているので、BUTTON_PINを「97」で初期化しておく(Raspberry Pi 3の場合は「5」となる)。
GpioPinクラスのメンバー変数pinとbuttonPin、汎用入出力「GPIO」ピンの可能な値を表す列挙体メンバー変数となるGpioPiValue型のpinValueを宣言する。
Animatorコンポーネントを作成して、メンバー変数animで参照しておく。また、GPIOピンを初期化するInitGPIO()メソッドを実行する。
ブール型メンバー変数の値がtrueならばジャンプする、そうでなければジャンプしないとするコードを記入する。このUpdate()メソッドは常に呼び出されており、タクトスイッチを押すアクションでflag変数の値を変化させている。
GPIOControllerクラスを使ってGPIOを取得し、OpenPinメソッドでLEDのGPIOを開く。Toradexでは「79」ピンになる。また、タクトスイッチのGPIOも開く、この場合は「97」になる。
最初にHIGH値を書き込むことで、オフ状態時にLEDを初期化するようにする。続いて、入力プルアップ抵抗がサポートされているかどうかを確認する。
ボタンを押したときのスイッチバウンスノイズを除去するために、デバウンスタイムアウトを設定。ボタンピンに、ValueChangedでbuttonPin_ValueChangedイベントに登録する。これが、ボタンが押されたときに呼び出される。
buttonValue_Changedは、タクトスイッチを押すたびに呼び出されるメソッドとなる。GPIOがHIGH→LOWに変化する処理を行い、HIGH(電流が流れる場合)のときに、メンバー変数flagをtrueで初期化し、それ以外の場合はfalseで初期化する。
この処理によって、タクトスイッチを押す動作で、LEDが点灯し、キャラクターがジャンプをする動きを制御できるようになる。タクトスイッチをオフにすると、LEDが消える処理とともに、キャラクターがジャンプする処理も停止する。
「Raspberry Pi 3」で早速チェック──「IoTハードウェア」を準備する
「Raspberry Pi 3」が登場。Windows 10 IoT Coreは早速サポートを表明
第1回 Windows IoTを始めようCopyright © ITmedia, Inc. All Rights Reserved.