VS2015のソリューションエクスプローラーの「参照」で右クリック→「参照の追加」を選択する。表示される、参照マネージャーから、「Universal Windows」→「拡張」→「Assembly-CSharp運用可能なSDK」メニューで、「Windows IoT Extension for the UWP 10.0.10240.0」にチェックを入れる(図1)。選んだAPIがソリューションエクスプローラーの「参照」内に追加される。
ソリューションエクスプローラーから「CubeRollingScript.cs」ファイルを開く。最初はエラーを示す赤い波線が幾つか表示されるが、気にしなくてもいい。
前述したリスト1のコードを追記修正する(リスト2)。
using UnityEngine; using Windows.Devices.Gpio; public class CubeRollingScript : MonoBehaviour { private const int LED_PIN = 79; private GpioPin pin; private GpioPinValue pinValue; void OnControllerColliderHit(ControllerColliderHit hit) { checkItem(hit.collider.gameObject); } void checkItem(GameObject obj) { if (obj.tag == "Cube1" || obj.tag == "Cube2" || obj.tag == "Cube3" || obj.tag == "Cube4") { pinValue = GpioPinValue.High; pin.Write(pinValue); obj.GetComponent<Rigidbody>().AddForce(Vector3.forward * 50, ForceMode.Force); } else { pinValue = GpioPinValue.Low; pin.Write(pinValue); } } private void InitGPIO() { var gpio = GpioController.GetDefault(); if (gpio == null) { pin = null; return; } pin = gpio.OpenPin(LED_PIN); pinValue = GpioPinValue.Low; pin.Write(pinValue); pin.SetDriveMode(GpioPinDriveMode.Output); } }
追記修正した「CubeRollingScript.cs」のポイントは以下の通りだ。
ユーザーモードの汎用入出力(GPIO)ピンを使うための型を含むWindows.Devices.Gpio名前空間を読み込む。
赤色のジャンパーワイヤを「SODIMM_79(GPIO)」につないだので、メンバー定数変数LED_PINを宣言し、Toradexでは「79」の値を記入して初期化する。一方、Raspberry Pi 3ではこの値を「25」にする。
GpioPinクラスのメンバー変数pin、汎用入出力(GPIO)ピンの可能な値を表す列挙体メンバー変数である、GpioPiValue型のpinValueを宣言する。
GPIOピンを初期化するInitGPIO()メソッドを実行する。
キャラクターが「立方体に触れた」ときの処理として、GpioPinValue.Highに、高いGPIOピンの値(約5V)をメンバー変数pinValueへ格納し、WriteメソッドでGPIOに電力を出力するよう記述する。
Toradexには、79番ピンとGND(電圧0V)の間に、LEDと抵抗を挟んでいる。電気は電圧の高いところから低いところへ流れる原則から、79番ピンに電圧をかけると、79番ピンからLEDを通ってGNDへ流れることになる。こうすることで、キャラクターが立方体に触れたら、LEDが光る仕掛けになる(※Raspberry Pi 3の場合は「25」に読み替えてほしい)。
一方、キャラクターが立方体に触れていないときは、GpioPinValue.Low(約0V)で、低いGPIOピンの値をメンバー変数pinValueへ格納して、WriteメソッドでGPIOに電力を出力するように記述する。出力したとしても電圧は低(約0V)、つまりLEDを光らせない処理となる。
GPIOControllerクラスを使ってGPIOを取得し、OpenPinメソッドでGPIOを開く。ここでは79ピンだ。低いGPIOピンの値(約0V)をメンバー変数pinValueへ格納し、WriteメソッドでGPIOに電圧をかける。
続いてSetDriveModeで、そのピンを入力に使うか、出力に使うかを指定する。今回は「出力」になるのでGpioPinDriveMode.Outputと指定し、さらにGpioPinValue.Lowと指定することで、「約0V」が出力される。こうすることで、初期状態では「LEDは光らせない」処理になる。
Copyright © ITmedia, Inc. All Rights Reserved.