こんにちはコハペペです。デジタルアウトで遊ぶプログラム講座3回目です。前回はLEDを追加して交互に点滅させてみました。アメリカのパトカーみたいでしたね。今回はもっとパトカーっぽく、短い時間点滅しながら交互に光らせるように、プログラムを改造してみましょう。
点滅の仕方は、左側のLEDが0.1秒で点滅を3回して、次に右側が0.1秒で点滅を3回というようにしたいと思います。
それではプログラムを書いてみましょう。
左上の「新規」のボタンをクリックして、プログラム名を今度は「mbed_blinky3」とします。
デジタルアウトを2つ使ってLEDを光らせたいので、デジタルアウトを追加します。前回と同じdp15に、myled2という名前にしたいと思います。
4行目に
DigitalOut myled2(dp15);
を追加してください。
まずはLEDが短く点滅するよう改造したいと思います。
今8行目のmyled = 1; で、LEDをONしてから、wait(0.2); という命令を使って0.2秒間待ってから、myled = 0; でLEDをOFFしていて、またwait(0.2); という命令を使って0.2秒間待ってからONして...と繰り返しています。
点灯時間を0.1秒と短くするには、この待っている時間を短くすればよいので、wait(0.1);と、数字を小さくします。
これを3回くり返したいので、8行目から11行目を2回コピーします。
これで、myledが3回短い時間で点滅するようになりました。
次にもう片方のLEDが同様に点滅するよう改造したいと思います。
8行目から19行目までを、20行目にコピーします。
コピーしたプログラムのmyledをmyled2と変更します。
これでmyled2も3回点滅するようになりました。
「コンパイル」をクリックしてコンパイルしてみましょう。
エラーが無くコンパイルできましたでしょうか?
よくあるエラーとして
Expected a ";" ...
というのがあります。この場合、エラーの出た行の1行手前の命令の終わりに ; が無いのが原因です。
上の例では32行目にエラーが出ているので、31行目の命令の終わりに ; を追加すればOKです。
C言語では命令の終わりに;をつけないといけないんです。
うまくコンパイルできればOK。ねこちゃんとパソコンをUSBでつないで、でてきたドライブにダウンロードしたファイルをコピーしてください。
マイコンとLEDとの配線は前回と同じです。
これで書き込み完了。ねこちゃんの赤いおめめを押してみましょう。
リセットしたときLEDが両方光ってしまっていますが、その後からは目的通りの光り方になっていますね。
これはリセット後デジタルアウトがONになってしまうのが原因です。
とりあえず、最初にOFFになるように
myled2=0;
を9行目に追加すればONになるのを防げます。
プログラムはこちらからダウンロードできます。
どうでしたか?デジタルアウト(DigitalOut)とwait(数字)だけで、LEDを思い通りの光らせ方ができるようになるのが実感できたでしょうか。
今回のプログラムは「マイコンで発明しよう実験セット」で実験することができます。
コメント