Unity 5.3のキャラクター操作と連動し、「触れたら光る“Lチカ”システム」を作る:ラズパイ3&Toradex、Windows 10 IoT Coreで楽しみながら検証するIoT実践入門(6)(3/4 ページ)
ITエンジニアに向け、「ビジネスに貢献するIoT活用」の第一歩を踏み出す「ひらめき」を得てもらうための本連載。今回は、Unity 5.3のキャラクター操作と連動した“Lチカ”アプリを作ってみよう。
書き出したUnity 5.3のプロジェクトをVS2015で開き、コードの修正を行う
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を宣言する。
Start()メソッドの処理
GPIOピンを初期化するInitGPIO()メソッドを実行する。
checkItem()メソッドに処理を追加する
キャラクターが「立方体に触れた」ときの処理として、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を光らせない処理となる。
GPIOピンの初期化処理を行う
GPIOControllerクラスを使ってGPIOを取得し、OpenPinメソッドでGPIOを開く。ここでは79ピンだ。低いGPIOピンの値(約0V)をメンバー変数pinValueへ格納し、WriteメソッドでGPIOに電圧をかける。
続いてSetDriveModeで、そのピンを入力に使うか、出力に使うかを指定する。今回は「出力」になるのでGpioPinDriveMode.Outputと指定し、さらにGpioPinValue.Lowと指定することで、「約0V」が出力される。こうすることで、初期状態では「LEDは光らせない」処理になる。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「Raspberry Pi 3」で早速チェック──「IoTハードウェア」を準備する
ITエンジニアに向け、「ビジネスに貢献するIoT活用」の第一歩を踏み出す「今後のひらめき」を得てもらうための本連載。初回は、登場間もない「Raspberry Pi 3」を中心に、IoTハードウェアとWindows 10 IoT Coreを準備するまでを解説する。 - 「Raspberry Pi 3」が登場。Windows 10 IoT Coreは早速サポートを表明
無線通信モジュール付きのRaspberry Pi 3が登場。搭載チップの性能も向上している。マイクロソフトは発売当日にWindows 10 IoT Coreでのサポートを表明している。 - 第1回 Windows IoTを始めよう
見聞きしない日はないほど流行している「IoT」。でも、どうやったら使えるのか? 本連載では読者諸氏が慣れ親しんだWindowsのIoT版を使って、IoTを実践してみる。まずは概要とインストールから始めよう。