SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

while文の演習と関数


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

 前回に続いて、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が点灯するはずです!

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
繰り返し、ループ三兄弟の末の弟 do~while

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
たった5つのルールではじめるC言語開発連載記事一覧

もっと読む

この記事の著者

舘 伸幸(タチ ノブユキ)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3730 2009/03/26 17:07

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング