CodeZine(コードジン)

特集ページ一覧

繰り返し

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

目次

whileを使った練習プログラム

 ここからは、これまで学んだ知識を使っていっしょに考えましょう。作るのは、「スプーンを叩いたらLEDが光る」ように動作するプログラムです。

 ポート設定のところで説明したように、マジカルボックスでは音を検出するとポートP30が1から0になります。LEDについて以前の連載記事「ハードウェアの話とコードの生成」を参照してください。全部で5つ実装されています。今回はD7を点灯させてみましょう。D7は第3回の表1にあるように、ポートP123を1にすると点灯します。

LEDを消灯

 では順に処理を考えていきます。まず最初にしないといけないのは、LEDを全部消灯させることです。点灯させるためには、あらかじめ消灯しておかないといけません。あたりまえのことなのですが、プログラミングというのはそういう当たり前なことまで事細かに気配りする必要があります。

プチ解説

 実際には、プログラムで消灯しなくてもLEDは消灯状態から開始します。これは、マイコンのポートはリセット直後(マイコンの起動直後)はハードウェアで0に初期化される仕様になっているためです。今回のマジカルボックスの回路ではポートが0のとき消灯するようになっているので、結果的に消えています。

 ですが、プログラミングするにあたっては、そういうところも手抜きせずきちんと書いておくことが、不具合を作り込まないために大切です。「ここはxxなはず」という思い込みで処理をはしょって失敗する例はプロでも意外と多いのです。

音信号が来るまで待つ

 次に、スプーンが叩かれるまで、つまり音信号が来るまで待つ必要があります。これは言い換えれば、「音信号が来ない間、なにもしない」です。音信号が来ないというのは……音信号の入力ポート(P30)が1の間ということです。

 「~の間」というのはwhile文の得意技ですから、while文の条件に、P30が1と等しいという条件を書けばいいはずです。「等しい」を表す演算子はなんでしたか。忘れた方は記事「たった5つのルール」を読んで復習しましょう。はい、=じゃなくて==でしたね。ということで、while文は

while ( P3.0 == 1 )

 と書けばいいことがわかります。つぎにちょっとむずかしいのは「なにもしないで待つ」かもしれません。これは意外と簡単、聞くとな~んだです。答えを言いますとこうです。

while ( P3.0 == 1 ){
    ;
}

注:P30はプログラム中ではP3.0と書きます

 実行文を何も書かず、セミコロンだけにします。これで、このwhile文は、P30が1の間、なにもしないでずっとここでぐるぐるループします。で、音信号がくるとP30は0になるので、( P30 == 1 )の条件が成立しなくなって、ループを終了し、次へと制御が進みます。なので、この後にLEDを点灯させる処理を書けばうまくいくはずです。

無限ループを置く

 さて、LEDを点灯させたあとはどうしたらいいでしょうか。そのままだとマイコンはどんどん先へ進んで、プログラムの存在しないところへ暴走していってしまいます。これを防ぐためにはいろいろな方法がありますが、ここでは無限ループを置く方法を学びましょう。

 無限ループはその名の通り無限にループし続ける処理です。これも通常はwhile文を使って以下ように書きます。

while(1){
    ;
}

 条件に1という固定の値を書くことで、永遠に条件が成立した状態にしているわけです。

 さあ、これでもう自力でプログラムが書けますね。PM plusを起動して、プログラムを入力してみましょう。

 PM plus を起動し、[ファイル]メニューから[ワークスペースを開く(W)]を選択します。ファイル指定のダイアログでD:¥mspoon¥test2¥test2.prwを指定します。ワークスペースを読み込んだら、ProjectWindowのソース・ファイルを展開([+]マークをクリックする)して、図20のようになっているか確認してください。

図20:test2.prwを読み込んだ直後のPM plus
図20:test2.prwを読み込んだ直後のPM plus

プロジェクト名を変更

 このままでもいいですが、せっかくなのでプロジェクトの名前を変えておきましょう。赤い円柱の横のAppliletの部分を右クリックして、表示されたメニューから「プロジェクト・タイトルの変更(E)」を選びます(図21)。

図21:プロジェクト名を変更する
図21:プロジェクト名を変更する

 名称入力のダイアログが開きますから、ここでは「while文練習」とでも入れておきましょう(図22)。

図22:プロジェクト名(好きな名前)を入力する
図22:プロジェクト名(好きな名前)を入力する

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

バックナンバー

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

もっと読む

著者プロフィール

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

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

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5