スイッチの仕様を考え、プログラムに落とし込もう!マイクロマウスで始める組み込み開発入門(7)(1/3 ページ)

小さくて賢いロボット、マイクロマウスの市販組み立てキット「Pi:Co Classic」を完成させた北上くんとえみちゃん。階層構造を意識したオリジナルプログラムで、LEDを光らせることに成功しました。今回は「スイッチ」を制御し、4つのLEDで2進数を表示させます!

» 2012年11月02日 12時50分 公開
[三月兎MONOist]

前回のあらすじ

 組み込み技術者に要求される要素が“ギュッ”と詰まった「マイクロマウス」。北上くんと新入社員のえみちゃんは、スキルアップを兼ねてマイクロマウスの開発を始めることにしました。北上くんの指導の下、えみちゃんは市販の組み立てキット「Pi:Co Classic」の基板を完成させ、ついにプログラム開発の段階に突入しました。「階層構造」を意識したオリジナルプログラムの開発を目標に掲げた2人は、前回、LEDを点灯させるプログラムの開発に成功しました。さて、えみちゃんは階層構造をきちんと理解できたのでしょうか……(前回の記事へ)。

⇒連載バックナンバーはこちら


本連載の登場人物

北上 篤人(きたがみ あつと)
26歳、男性。次期プロジェクトリーダーとして期待されている(と、本人は思っている)。専門は、ソフトウェア開発。電気回路やハードウェアに苦手意識を持っていて、いつか克服したいと考えている。

物江 えみ(ものえ えみ)
22歳、女性。この4月に入社したばかりの新入社員。C言語は大学の授業で学んだ程度なので、仕事についていけるかどうか不安を抱えている。性格は明るく、好奇心旺盛。早く一人前になりたいという強い熱意を持っている(ようだ)。


スイッチの制御

――ピンポーン!(チャイムの音)

えみ

こんにちは〜。


北上

いらっしゃい!


えみ

センパイ! ワタシ、宿題だった「2つのLEDを点灯/消灯させるプログラム」が組めましたよ!!


北上

おぉ! すごいね。

どれどれ。早速見せてよ。


えみ

はいっ!!


動画1 前回の宿題。前2つのLEDを点灯/消灯させるプログラム

北上

うんうん。ちゃんと動いているようだね!


えみ

ワタシ、階層構造が便利だってようやく理解できた気がします。


北上

それはよかった。

じゃあ、今日は「スイッチ」を制御してみようか!


えみ

ハーイ!



 前回、北上くんに言われるがままにプログラムを作成し、理解をいまひとつ深められていなかったえみちゃん。自分の手で簡単なプログラムを組んでみて、ようやく階層構造のメリットを実感できたようです。えみちゃんが作成したプログラムは、3ページ目の記事末にあるダウンロードソースの中に「前2個LED処理関数(ctrl_led_f)」として保存してあります。本稿をご覧いただいた後に、ぜひ確認してみてください。

スイッチの役割

 今回はスイッチの制御を行います。早速、プログラムの開発に取り掛かりたいところですが、その前に――、スイッチの役割について考えてみましょう。

 スイッチは、私たちの生活に身近なユーザーインタフェースの1つです。

朝、目覚まし時計を止めて、リモコンでTVの電源をオンにする……。トイレの電気を付け、朝の用たしが済んだらウォシュレットの洗浄ボタンをポチっと押す……。給湯器のスイッチを入れて顔を洗ってスッキリ……。部屋の電気を消して、会社に向かう……。エレベーターの「6階」ボタンを押して事務所へ……。


 こう考えていくと、私たちは1日の中で非常にたくさんのスイッチを押しています(数えてみても面白いかもしれません)。

 さらに身近なケースでは、PCのキーボードも“100個前後のスイッチが並んだ入力装置”と言えます。一言で“キーボード”と呼んでいますが、その実態は、アルファベットや数字、CtrlやShiftといったスイッチ(キー)を効率良く配置し、電気的なON/OFFを組み合わせて、文字入力などの処理を実現しているのです。

 つまり、スイッチを制御する際に大切なのは「そのスイッチに、どんな処理をさせるのか」です。まずは、これを考えることです。

 Pi:Co Classicには、全部で5個のスイッチがあります。そのうちの2個、電源スイッチとモード切り替え用(選択用)のスライドスイッチは既に役割が決まっています。そのため、私たちが自由に制御できるのは、機体後方に並んでいる3個の「プッシュスイッチ」だけです。

5個のスイッチ 画像1 Pi:Co Classicには5個のスイッチがある。制御に使えるのは、後方にある3個のプッシュスイッチだ

 ごく普通に考えれば、「スイッチを押したらPi:Co Classicが“走る”、もしくは“止まる”」です。これが基本になります。例えば、3個のスイッチそれぞれに「迷路探索走行」「最短走行」「止まる」の機能を持たせることができます。

 ただ、マイクロマウス競技に参加する場合、搭載している機能がたったの3つでは心もとないですよね……。競技前には、直進やターン性能のチェックもしておきたいですし、競技中に最短走行するときには、スピード選択も行いたいです。このように、マイクロマウスにあらかじめ搭載しておきたい機能は、いろいろと考えられるのです。3つではとても足りません。

 それでは、たった3個のスイッチでたくさんの機能を実現するには、どうしたらいいでしょうか?

 例えば、スイッチを単独で押したときと、2個同時に押したときで機能を分けるという考え方もありますね。これならば6通りの機能が搭載できます。他にも、ゲームコントローラーのように“コンボを決める”という方法もありますね。青でノーマルスピード走行、赤・赤・赤・青としたら3倍速で走るなど……。

 こうした方法も面白そうですが、複雑なコンボを幾つも覚えなければならないので大変ですよね。何よりモードが正しく選択できているかどうかを、ユーザーが確認できないというのは一番のネックです。

 こう考えていくと、Pi:Co Classicのスイッチに求める機能は、

  1. 複数の機能を選択できる
  2. これから実行する機能を、ユーザーが確認できる

となります。これらをどのように実現したらよいのでしょうか?

えみ

センパイ!

ワタシ、今までキーボードのキー1個1個がスイッチだって、考えたこともありませんでしたよ〜。


北上

うん。

当たり前に使っているから、スイッチだって意識がないよね。


えみ

何だか「スイッチを制御したら、スゴいことができるんだ!」って気がしてきました!


北上

(う、うーん。ちょっと違う気がするけど……)。

3個のスイッチが使えるけど、どう使ったらいろんな機能を効率良く搭載できると思う?


えみ

えっ〜とぉ〜。

前回、前に4つ並んだLEDを「デバッグ用」って、呼んでいましたよね。……あっ! サンプルソースでは、スイッチを押すたびに、LEDが次々と光っていました。


北上

おっ! いいところに気がついたね。


えみ

スイッチ3個とLED4個で……。

あ、あれれ? ……幾つのパターンが表示できるかなぁ?


北上

LEDとスイッチをどう組み合わせて使うのが最適か?

プログラミングに取り掛かる前に、それをちゃんと考えた方がイイね!!



       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.