« Arduino互換機 (2) | メイン | モールス受信練習機でセンサ・オルゴールを作ろう »

モールス受信練習機で「はてなボタン」を作ろう


 エレキジャックNo.20のモールス受信練習機を使って「はてなボタン」を作ってみます。

■はてなボタン?

 「はてなボタン」は筆者が名付けたのですが、MAKE のイベント会場や、ハムフェアなどで? と思ったら、..--..と音を鳴らすのが「はてなボタン」です。..--..はモールス符号の? です。ちょっと変更するとCQボタンになります。

■準備しよう
 まずはモールス受信練習機を完成させます。モールス受信練習機は部品セットを利用できます。プログラムを変更するために、PICkit3 (デバッガ兼プログラマ、秋月電子マルツパーツ館エレショップなどで入手できる)と MPLAB IDE が必要です。以下では MPLAB IDE 8.80 を使っています。以前の記事を参考にMPLAB IDE をインストールしておきます。

■プログラムを書き換える
 EJ-CW1822_hatena_CQCQ.zipをダウンロードして適当なフォルダ(c:\など、日本語がパスに入らないところがよい)に展開します。モールス受信練習機をつないだPICkit3をパソコンにつないでおきます。EJCW.mcpをダブルクリックすると、MPLAB IDEが起動します。メニューのProjectにあるBuildをクリックしてコンパイルします。コンパイルできたら、Programアイコンをクリックするか、ProgrammerメニューからProgramをクリックしてPICマイコンにプログラムを書き込みます。エラーがなければOKです。

■書き込んだプログラムの内容

 さきほど書き込んだプログラムでは音が鳴りません。ソース・ファイルmain.cを見てみましょう。main関数を探すと、

void
main(void)
{
    init();                 // 初期化
} 
と書いてあります。マイコンは電源が入るとmain関数を実行するのですが、初期化しかありません。だから音が鳴らないのです。

■モールス符号を出す
 play_words関数を使うとモールス符号の音を出すことができます。使い方は簡単で、
play_words("ABC");
と書くと .- -... -.-. と音が鳴ります。main関数を、
void
main(void)
{
    init();                 // 初期化

    play_words("ABC");
}
と書き換えてから、さきほどと同じようにBuild, Programをクリックして、コンパイル、プログラムの書き込みをします。 ; を忘れないようにします。今度は ABC ABC ABC とずっと音が鳴るようになりました。

■main関数を終わらないようにする
 今度は電源を入れたら1回だけ符号を出すようにしましょう。main関数が終わるとPICマイコンがプログラムの最初から実行してしまい、いつまでも ABC を繰り返しているので、main関数を終わらないようにします。
for (;;)
{

}
と書くと、{ と } で囲まれた範囲のプログラムをずっと実行し続けるようになります。{と}の間には何も書かなくてもかまいません。
void
main(void)
{
    init();                 // 初期化

    play_words("ABC");
    for (;;)
    {

    }
}
として、コンパイル、書き込みをすると、電源を入れてから1回だけ ABC の符号が出るようになりました。

■スイッチを押すと1回だけ符号を出す
 次はスイッチを押すと符号を出すようにしてみます。
while (BIT_SW != 0)
{
}
と書くと、BIT_SW != 0 という式が成り立っている間、{と}の間のプログラムを繰り返すようになります。BIT_SWはスイッチが押していないとき1に、押されると0になります。!= は等しくないという意味です。つまり、上のプログラムでは、スイッチを押していないときに、ずっと待つようになります。
void
main(void)
{
    init();                 // 初期化

    while (BIT_SW != 0)
    {
    }

    play_words("ABC");
    for (;;)
    {

    }
}
と変更して、コンパイル、書き込みをします。電源を入れても音は出ませんが、スイッチを押すと出るようになりました。

■スイッチを押すと符号を出す
 上のプログラムでは1回音を出すと電源を入れ直さないといけません。電源を入れているときにスイッチを押すと何回でも音が鳴るようにするにはどうしたらいいでしょうか?

 ただ待っているだけではなくスイッチを見張ればよさそうです。
void
main(void)
{
    init();                 // 初期化

    for (;;)
    {
        while (BIT_SW != 0)
        {
        }
        play_words("ABC");
    }
}
をコンパイルして書き込んでみてください。電源を切らなくてもスイッチを押すたびに音が鳴ります。

プログラムを見るとfor (;;) で繰り返す範囲が、
while (BIT_SW != 0)
{
}
play_words("ABC");
となっています。これは、スイッチが押されるまで待って、ABCの符号を出すということです。1回音を出すと、またスイッチが押されることを待つようになるので、思った動作になります。

■はてなボタンの完成
 はてなボタンにするにはどうしたらいいでしょうか。そうです。ABCを?に置き換えるだけです。
void
main(void)
{
    init();                 // 初期化

    for (;;)
    {
        while (BIT_SW != 0)
        {
        }
        play_words("?");
    }
}
だれかいないかなと、CQを出すCQボタンにするのも簡単ですね。いろいろなボタンを作ってみると面白そうです。
(光永 法明)

カテゴリ:

トラックバック

このエントリーのトラックバックURL:
http://www.eleki-jack.com/mt/mt-tb.cgi/6279





カテゴリ

会社案内
情報セキュリティおよび個人情報の取り扱いについて

コメントとトラックバックは、spamを予防するために、編集担当が公開の作業をするまで非公開になっています。
コメントはそれぞれ投稿した人のものです。

Powered by
Movable Type 4.1
/*yahoo remove*/