「誰でもわかるマイコン入門」時間差シャッター分配器
さて、前回は、簡単なインターバルタイマーを作成しました。今日は、本来の目的であるシャッター分配器で改造します。まずシャッター入力用のコネクタを追加します。
一方をP5に、もう一方を3.3V Regulated Outにつなげます。これで、シャッターONのとき、マイコンに1が入力されます。
プログラムは以下にアップしました。
http://developer.mbed.org/users/Honmaka/code/IntervalShutter3/
プログラム解説です。
DigitalOut Camera1(p30);
p30をデジタル出力として使う、名前をCamera1と名づける
DigitalOut Camera2(p29);
p29をデジタル出力として使う、名前をCamera2と名づける
DigitalIn Input(p5);
p5をデジタル入力として使う、名前をInputと名づける
int main() {
Input.mode(PullDown);
Inputをプルダウンする(0Vにつなげる)これにスイッチが解放の場合、0になる
int PreInput = 0;
整数型の変数をメモリからもらいPreInputと名づける。そして0に初期化する。
ここで変数という新しい概念が出てきました。プログラムでは入力したデータや計算したデータを保存したいことがよくあります。そのときメモリ領域からもらうメモリを変数といいます。変数の名前はプログラマが自由に付けられます。intは整数型を表します。他には小数点型のfloatなどもあります。また上記のようにある値で初期化することもできます。
PreInputという変数ですが、これは、定期的にスイッチの状態を入力するのですが、一回前の入力を保存しておくために使用します。なぜ、前の状態を保存するかと言うと、スイッチの変化を感知したいからです。
int NowInput;
整数型の変数をメモリからもらいNowInputと名づける。NowInputが前回ではなく現在のスイッチ状態を保存しておきます。
Camera1 = 0;
カメラ1のシャッターをOFFにします。
Camera2 = 0;
カメラ2のシャッターをOFFにします。
while(1) {
無限ループ繰り返し
NowInput = Input;
スイッチの状態を入力します。
if (NowInput != PreInput) {
もし、スイッチが前回とい違うならつまりOFF->ON、またはON->OFFなら次の処理をします。
Camera1 = NowInput;
カメラ1のシャッターをONまたはOFFします。
wait(1);
1秒待ちます。(時間差シャッター)
Camera2 = NowInput;
カメラ2のシャッターをONまたはOFFします。
}
if条件文はここで終わり
PreInput = NowInput;
現在のスイッチの状態をPreInputに保存、次回のif条件判定で利用する
wait(0.1);
0.1秒まつ。あまり頻繁にスイッチの状態を連続して読み込みすると、スイッチの状態が変化したときのバタツキ(ON/OFFを頻繁に繰り返すこと)まで読み込んでしまうため、0.1秒間隔でスイッチの状態を読み込めば十分。
}
}
さて、次回からは応用編に入ります。手始めにTFT液晶をつけてみます。お楽しみに。
| 固定リンク
コメント