macdonaldpotato

こんにちはコハペペです。前回まではデジタルアウトを使ってLEDを光らせたり、音を出したりしました。今回はデジタルインを使って「スイッチが押されたら何かをする」というプログラムに挑戦しましょう。
前回マクドナルドのポテトの音が鳴るプログラムを作りましたが、この音をボタンを押したら止められるようにしてみましょう。
今回は「新規」でプログラムを作成するのではなく、前回のプログラムを元に改造していきたいと思います。
こちらより前回のプログラムをインポートしてください。
macpotatoimport
右上の Import this program でインポートできます。

デジタルインはデジタルアウトと同じで、下の図の dp~ (~は数字)のピンで使えます。
mbedpinasigne
今回は右下の15番ピン、 dp15 をスイッチの入力として使おうと思います。
このスイッチがONしたら、音を止めることにします。

それではプログラムの改造をしていきます。
まずは、dp15をswという名前でデジタルインとして使うというプログラムを書きます。
3行目の
DigitalOut myled(LED1);
をコピーして4行目にペーストしてください。
そして、OutをInに、myledをswに、LED1をdp15に書き換えます。
DigitalIn sw(dp15);
となります。
programudigitalinsw

これで、15番ピンが入力ピンとして使えるようになりました。
15番ピンがONだったらプログラム中のswが1に、15番ピンがOFFだったらswが0になります。

次はswがONかOFFかを判定する方法を紹介します。
判定にはifという命令を使います。
if( 条件 )
{
  命令1;
  命令2;
  ...
}
という書き方をします。前回紹介したfor()に似ていますね。
swが1だった時に { } の中の命令を実行するときは sw == 1
swが0だった時に { } の中の命令を実行するときは sw == 0
を( ) の中の条件に書きます。= ではなく == とイコールが2つ連続するので注意してください。

今回はswが押されていたら5秒間音を止めるというプログラムにしてみましょう。
30行目からifの命令を書いていきます。
if( sw == 1 )
{
    wait( 5 );
}
programuswwait5

これで、スイッチが押されていたら、5秒音が止まるというプログラムになりました。
コンパイルしてダウンロードしたファイルを保存してください。
今回のプログラムはこちらからダウンロードできます。

次は回路を作ります。
マイコンの左下の14番ピンの列にスピーカーの+を挿して、青いグランドのラインにスピーカーの―を挿します。これは前回と同じです。
さらに、マイコンの右下の15番ピン(ブレッドボードの14列目)にスイッチの片方を挿し、16列目にもう片方を挿します。17列目と赤い電源ラインとをジャンパーワイヤーでつなぎます。
breadboadspsw15pin
これで、スイッチが押されると15番ピンがONになるようになりました。
あとは、マイコンとねこちゃんをこちらを参考につないでください。
ねこちゃんのUSBをパソコンとつないだときにできるドライブに、先ほどダウンロードしたファイルをコピーしてください。
これで書き込み完了です。赤いおめめを押してみてください。

「ピロピ♪」「ピロピ♪」「ピロピ♪」あのマクドナルドの音が鳴りましたね。
それではスイッチを長押ししてください。
「ピロピ♪」が終わった後で止まると思います。スイッチから指を離してしばらくするとまた「ピロピ♪」「ピロピ♪」と鳴りだすと思います。

今回はデジタルアウト(DigitalIn)とifという命令をまとめて紹介しました。
これで、スイッチにも対応したプログラムが書けるようになります。

前回紹介したカッコーとなる信号機も、スイッチ入力を追加することで押しボタン式信号機になります。

これまで紹介した、DigitalOut、DigitalIn、for、if、wait だけで結構いろいろなプログラムが書けてしまいまうんです。
今回のプログラムは「マイコンで発明しよう実験セット」で実験することができます。
nekochanset