プログラミングカリキュラム

車両ベースのプログラム例

車両ベース上にある複数の入出力デバイスを使用した、総合的なプログラムを作成しましょう。

プログラムの概要

今回は、次のような動作をするプログラムを作ることにします。

動作概要

使用する車両ベース上デバイス

マイク検知

回路上で音圧を検知したとき基板上の黄緑LED[MIC](LD4) が点灯します。
検知時間が短いとプログラムの入力が読み取れないことがあります。その場合は、

  1. マイクの感度を上げる
    音センサ感度調整ボリウム (VR7) を時計回しに回す
    ※ 感度を上げすぎると自身の走行音に反応するので回しすぎないよう注意してください。
  2. 検知信号のパルス長を長くする
    基板上の「センサ検知パルス長の切替ジャンパー (JP1)」を「L」側に短絡ソケットを差し替えます。
などで対応してください。

作成方針

これらの入出力装置は、いずれも確認や操作に要する時間は短いため、簡単な条件であれば、基本的には前節までに説明した永久ループによるプログラミングで対応できます。 処理の流れは、次のようになります。

# (A) 初期設定
while True:
    # (B) 入力装置の読み取り
    # (C) 入力結果や現在および過去の状態から、出力内容や次の状態を決定
    # (D) 出力の反映
    # (E) 次回ループまで短時間待機
    

以上の概要を整理すると、このプログラムでは、モーターの動作を基準にした状態が「停止」「前進」「左旋回」「右旋回」の4つに分かれています。それぞれの状態間の関係について図にまとめると下記のようになります。
このような図のことを「状態遷移図」と呼びます。
(実際には、図中に遷移を伴わないものを含めてすべての入力を網羅するのが通例ですが、下図では説明を単純化するために省略しています)

状態遷移図

プログラム説明

上記の状態遷移図に基づいたプログラムの例を下記 CODE9 に示し、続いて各部の説明を行います。

CODE9

(A) の初期設定には、永久ループに入る前に変数の設定を行います。

(B) では、条件判定に用いるセンサー類の入力データを取ります。

(C) では、状態遷移図で表した内容をもとに、各種センサー入力と現在状態の組合せから条件判定を行い、出力と次状態の変更を行うための記述をします。

(D) では、状態遷移によって得られた次状態の確定と出力制御を行います。

(E) では、次回ループまでの待ち時間を指定して待機するため、time モジュールの sleep 関数を呼び出します。