Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

while文の演習と関数

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/10/24 11:00

 前回に続いて、while文を使った練習プログラムを実際に動作させてみます。あと、ループ3兄弟の末っ子、do~whileについても学びます。第5回からのC言語の文法編は、ちょっと長丁場になってしまいましたが、構文はこれでおしまいです。あとは関数とちょっとしたおまじない文だけです。もう少しですから頑張っていきましょう。  

目次

練習プログラムをシミュレータで動作させてみよう

 前回のプログラムはエラーなくビルドできましたでしょうか? 今回はシミュレータSM+で動作させるところから始めましょう。PM plusから[ビルド]→[ディバグ]でSM+を起動してください。途中のメッセージなど、わからなくなったらこれまでの記事を参考にしてください。

 SM+が起動したら、シミュレーション用のパネルを作ります。以前の記事「たった5つのルール」でマジカルボックスのLEDパネルは作ってあるので、それを再利用します。シミュレータ・メニューから、[開く(O)]を選択すると、ファイル名入力のダイアログが開きます。ファイルの場所は以前保存をしたD:\mspoon\test1です。

 図1のようにファイルの種類を「入出力パネル ファイル(*.pnl)」にすると、図2のようにいくつかのファイルが表示されます。その中の「マジカルLED.pnl」が目的のファイルです。記事「たった5つのルール」で別の名前で保存をした方は、その名前のファイルを選んでください。

図1:ファイルの種類は入出力パネルを選ぶ
図1:ファイルの種類は入出力パネルを選ぶ
図2:マジカルLED.pnlを開く
図2:マジカルLED.pnlを開く

 画面には、図3のように以前作成したLEDのパネルが表示されます。

図3:マジカルボックスに対応したLEDのパネル
図3:マジカルボックスに対応したLEDのパネル

 今回はスプーン音センサの入力が必要ですが、シミュレータには一般的な部品しか用意されていません。そこで、押しボタンスイッチで代用することにします。部品メニューから[ボタン(B)]を選んでください(図4)。

図4:部品メニューからボタンを選ぶ
図4:部品メニューからボタンを選ぶ

 ※部品メニューは、パネル・ウィンドウがアクティブになっていないと表示されません。見つからない時は、一旦パネル・ウィンドウをクリックすると、現れます。

 次に、パネル・ウィンドウへマウスカーソルを移すと、カーソルが十字になります。ここで適当な場所に左クリック→ドラッグしますと、四角い部品が作成されます(図5)。このあたりは以前LEDを作画したときと同じです。

図5:適当な大きさの押しボタンスイッチを作画する
図5:適当な大きさの押しボタンスイッチを作画する

 作画できましたら、今度は作ったボタンを右クリックしてメニューから「プロパティ」を選ぶとParts Button Propatiesのウィンドウが開きます。図6を参考に設定をしてください。

 まず、ラベルはなんでもOKです。ここでは空白にしています。接続端子は、もちろんP30です。アクティブレベルは、このスイッチを押したときに、接続されているポートがLOW(0)になるのかHIGH(1)になるのかを設定します。

 前回(「繰り返し)説明したように、マジカルボックスの回路では、スプーン音を検出したときに0、つまりLOWになるようになっています。なので、ここでもスイッチを押した時にLOWになるようにアクティブレベルにLOWを選びます。種類はプッシュです。保有時間は一応10msecにしておいてください。

図6:ボタンのプロパティを設定する
図6:ボタンのプロパティを設定する
プチ解説

 スイッチの種類で、プッシュはその名の通り押しボタンスイッチです。通常(本物)は、押している間オン(またはオフ)になります。トグルは、1回操作するごとにオンとオフが切り替わるタイプのスイッチです。ビデオデッキなどの電源スイッチの動作がトグル動作です。グループというのは、いくつかのスイッチがグループになっていて、どれかを操作すると他がリセットされるタイプです。昔のラジカセのテープレコーダの操作スイッチがこれです。停止を押すとプレイが解除されます。

 プッシュの場合は押している間オンのはずですが、シミュレータのマウス操作ではむずかしいので、このような設定があります。マジカルボックスではスプーン音を検出すると、最低数十ミリ秒間アクティブになるように設計しています。今回はそれに近い値ということで10msecにしてみました。

 次に、シミュレータのパネルを作成するモードから操作するモードに切り替えます。図7のように、図形メニューから、「入力シミュレーション」を選択してください。

図7:図形メニューから、「入力シミュレーション」を選択
図7:図形メニューから、「入力シミュレーション」を選択

 以上で準備は完了です。さあ、実行してみましょう。これまではを使って1行ずつ実行していましたが、今回は一気に走らせてみます。SM+の左上のアイコンからをクリックします。これで実際のマイコン同様にプログラムを順番に実行していきます。

 この状態で、パネルはLEDがずべて消えていますね? プログラムはmainの頭から始まって、LEDの消灯処理をして、いまはwhile文でP30への信号入力を待っているはずです。ためしに一旦プログラムの動作を止めてみましょう。それにはストップのアイコンをクリックします。

 どうでしょう、図8のように、P30が1の間待つwhile文のどこかで止まるはずです。つまり、ここのループをずっと実行していたわけですね。この状態で押しボタンスイッチを押してやれば、このwhile文を抜けて、図8での64行目にあるLED D7を点灯させる処理を実行するはずです。

図8:一旦止めてみるとwhile文のどこかで止まる
図8:一旦止めてみるとwhile文のどこかで止まる

 再度アイコンをクリックして実行させます。今度はパネルでさきほど作成した押しボタンスイッチを押して(クリックして)みましょう。図9のようにD7が点灯しましたね。P30の値を監視していたwhile文を抜けたわけです。ここでまたアイコンをクリックして実行させます。今度はパネルでさきほど作成した押しボタンスイッチを押して(クリックして)みましょう。図9のようにD7が点灯しましたね。P30の値を監視していたwhile文を抜けたわけです。ここでまたをクリックしてプログラムを止めてください。きっと、最後の無限ループのどこかで止まるはずです。

 今回は自動実行モードで走らせて試しましたが、もちろんこれまでの1行ずつ実行するやりかたでも試すことができます。興味あるひとはやってみてください。リセットで何度でも最初からやり直すことができます。

マジカルボックスでもやってみよう

 今回の練習プログラムは、マジカルボックスのハードウェア仕様に合わせてプログラムを作りましたので、ボードに転送するとちゃんと(シミュレータでなく)本物でも動作します。D:\mspoon\test2にはtest2.hexというファイルができていますので、これをWriteEZ2でマジカルボックスに書き込んでみてください。書き込み方法は第1回の内容を参考にしてください。

 マジカルボックスのSW3を書き込みモードにしてWriteEZ2で書き込み、SW3をもとに戻してリセットボタンを押せば準備完了です。ここで丸い超音波センサの近くでスプーンを叩いてみてください。うまく音が検出されれば、D7が点灯するはずです!


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 舘 伸幸(タチ ノブユキ)

    NECマイクロシステム株式会社 勤務 NPO法人SESSAME 所属 開発ツールのソフトウェア開発を経て組込みソフトウェア開発に従事。プライベートにも半田ごては手放さない。 2006年からSESSAME に参加。若い世代に物を作る楽しさを伝えていきたい。

バックナンバー

連載:たった5つのルールではじめるC言語開発

もっと読む

おすすめ記事

All contents copyright © 2006-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5