ARMマイコン「LPC1114」にはさまざまな周辺デバイス(ペリフェラル)が内蔵されていますが今回は最も基本的な周辺デバイスの1つ、「GPIO」の入力について勉強します。
この連載では、組み込みの世界で最も成功したプロセッサの1つ「ARM」を用いたマイコン開発にチャレンジします。取り上げているマイコン「LPC1114」にはさまざまな周辺デバイス(ペリフェラル)が内蔵されており、前回は「GPIO(General Purpose Input/Output)」の出力について説明しました。
今回は出力の対になる、GPIOの入力機能について学びます。
LPC1114は特殊な用途に割り当てられたピン(電源やデバッグ用ピンなど)以外は全て、GPIOとして利用できます。GPIOの入力機能を使えばこれらのピンの状態、すなわちそのピンに印加された電位を0か1(何が0で何が1かは後述します)で読み取ることができます。これらのピンにタクトスイッチや光センサーを接続することにより、タクトスイッチが押されたか、あるいはセンサーに光が射し込んだかをプログラムから判断することができるのです。
GPIOの入力機能をプログラムから使うためにはDigitalInクラスを使います。それではこのクラスの使い方を見ていきましょう。
新規にプログラムを作るとmain.cppとmbedがフォルダーの中に作られますが、mbedフォルダーの中のClassesの中のDigitalInというファイルを開いてください。すると図1のような画面が現れます。このクラスのメンバー変数やメンバー関数の説明が表示されますね。また少し下にスクロールするとサンプルプログラムが現れます。とりあえずこのサンプルプログラムを動かして動作を確かめて見ましょう。
1:#include "mbed.h" 2:DigitalIn enable(dp1); 3:DigitalOut led(LED1); 4:int main(){ 5: while(1){ 6: if (enable){ 7: led = !led; 8: } 9: wait(0.25); 10: } 11:}
2行目で入力に使うピンの設定を行っています。DigitalInというクラスのインスタンス(enable)を生成する際に入力として使うピンを指定します。この場合はLPC1114のdp1を入力として使います。3行目ではLEDを点灯させるため、LED1にひも付けされたピンを使います。
3行目から9行目までの永久ループでは、enableの値、すなわちdp1の状態が1であればledの値を反転させてもう一度ledに書き込みます。この操作によりLEDが点灯している場合であれば消灯させ、また消灯している場合であれば点灯します。この動作を0.25秒間隔で行います。このプログラムを動作させるとdp1の値が1の場合、LEDが0.25秒間隔で点滅を繰り返すということになります。
それでは早速このプログラムをビルドしてLPC1114に書き込んでみましょう。プログラムのビルドの仕方およびマイコンへの書き込み方は連載の第2回および第3回をご参照ください。
さてターゲットマイコンに書き込んだプログラムを走らせて、動作を確認してみましょう。筆者はdp1に抵抗(1KΩ)の一端を差し込んで、もう一端を+電源あるいやGNDに差し込んで動作を確認しました(ピンの位置は図2を参照)。それ以外の回路は以前に紹介した回路と同じです(図3)。抵抗を+電源につないだときにはLEDは点滅しますが、オープン(抵抗がどこにもつながっていない状態)、あるいはGNDにつながっている状態ではLEDは点灯あるいは消灯のままですね。
この現象を踏まえたうえで、もう一度プログラムとつき合わせてみましょう。注視したい点は6行目のif分の中のenableの値です。どういう場合に1で0なのでしょうか。現象から判断すると、抵抗を介して+電源につないだときは1で、それ以外のオープンのときとGNDにつないだときは0のようです。
Copyright © ITmedia, Inc. All Rights Reserved.