今回は「4つのLEDが全て点灯/消灯した後、右から順にLEDが1つずつ点灯し、全て点灯したら、右から順に消灯する動作を繰り返す」アプリケーションを作ります。
全てのLEDを点灯/消灯させるために、4つのドライバ関数を呼び出してもいいのですが、今後も使う可能性を考えて、コントローラドライバに「LED全点灯関数」と「全消灯関数」を追加しておきましょう(ソースコード7)。
このように、アプリケーションに必要な機能をモジュール化するのが、コントロールドライバの役割です。
void ctrl_led_on(void) { //LED全点灯 drv_led_r(LED_ON); //右点灯 drv_led_fr(LED_ON); //前右点灯 drv_led_fl(LED_ON); //前左点灯 drv_led_l(LED_ON); //左点灯 }
ソースコード7 LED全点灯関数。同様にLED全消灯関数も作成する |
アプリケーションモジュールでは、コントローラドライバに記述されている関数を呼び出し、必要なアプリケーションを作成します(ソースコード8)。
void app_main(void) { //ループカウンター int cnt; //全点灯 ctrl_led_on(); //時間を空ける for(cnt = 0; cnt <= 10000000; cnt++); //全消灯 ctrl_led_off(); // while(1) { //時間を空ける for(cnt = 0; cnt <= 10000000; cnt++); //右LED点灯 ctrl_led_r(LED_ON); …… 中略 …… //左LED消灯 ctrl_led_l(LED_OFF); //時間を空ける for(cnt = 0; cnt <= 10000000; cnt++); } }
ソースコード8 LED点灯のアプリケーション。ここでは必要なコントローラモジュールを呼び出すだけ! |
後は、メイン関数で初期処理関数「init_all」とアプリケーション実行関数「app_main」を呼び出せばOKです。
>>ソースコード(Mouse201208.lzh)のダウンロードはこちら
さぁ、プログラムをビルドして、Pi:Co Classicの動作確認をして見ましょう。
やったー! ちゃんと動いてますね!!
せっかく作ったから、Pi:Co Classicがゴールに着いたときにこのアプリケーションを呼び出そうか!
それは、いいですね!
「わーい! ゴールできたぁー」って喜んでいるように見えますよ。
うんうん。
で、階層構造化については、どうだった?
正直、まだピンとこない部分もあるんですけど……。
ドライバモジュールを作れば、後はコントローラドライバで必要なモジュールを組み合わせておけば便利なんだなーって。
そうそう! そうなんだよ。
コントローラドライバに前左、前右のLEDを同時に点灯/消灯するモジュールを作っておけば、走行中に前壁を見つけた時、2つ一緒にLEDを光らせるってカンタンにできるんですよね!
その通り! バッチリ分かっているじゃないか!!
じゃあ、早速、そのモジュールを作ってみよう。
えっ……!? あ、あの〜。
それはまた次の機会ということにしません……か?
OK!
じゃあ、次回までの宿題ってことで!
あ、はい……(グスン)。
と、ところで、センパイ。そろそろご飯でも食べに行きませんか?
よし、そうしよう!
近所に新しいカレー屋ができたから、そこに食べに行こう! オープン記念の割引クーポンもらったんだよねぇ〜。
あっ、(あのチェーン店……)いいですね〜(棒読み)。
ようやくPi:Co Classicのプログラミングに着手した2人。自分で書いたプログラムでマイクロマウスを走らせるという目標に向け、その一歩を踏み出しました。次回は、「スイッチ」について取り上げます。お楽しみに! (次回に続く)
えみちゃんと北上くんも、無事にオリジナルプログラムでLEDを制御できました。2人のPi:Co Classicが迷路を走る日が楽しみですね。
さて、前回のコラムで告知した通り、筆者らは2人より一足早く迷路走行にチャレンジすべく、2012年9月23日に開催された「第30回 マイクロマウス 東日本地区大会」に参加。初完走を果たしました(残念ながら、最短走行はできませんでした)。
次は、10月28日に名古屋工学院専門学校(名古屋市熱田区)で開催される「第31回 マイクロマウス 中部地区大会」に出場します。最短走行にチャレンジするので、ぜひ応援してください!
関連リンク: | |
---|---|
⇒ | マイクロマウス委員会 中部支部 |
Copyright © ITmedia, Inc. All Rights Reserved.