« モールス受信練習機でタイマとメトロノームを作ってみる(2/3) | メイン | SDカード・アダプタ(1) »

モールス受信練習機でタイマとメトロノームを作ってみる(3/3)


 ラーメン・タイマ、メトロノームの次にはキッチン・タイマに挑戦です。ラーメン・タイマと違ってボリューム(半固定抵抗)で時間を設定できるようにします。

■ラーメン・タイマからキッチン・タイマに変えるには?
 ラーメン・タイマでは3分間(180秒間)の待ち時間の間、1秒に1回音を出すためにforループを使って
for (i=0; i<3*60; i++) {
    beep(1500, 100);
    delay100ms(9);
}
と繰り返しをしていました。では、どこを変えるとよいでしょうか? 3*60の部分を変えられるとよさそうですね。そこで変数 n と置いてしまいましょう。

■繰り返しの回数を計算する
 ボリュームの角度とA-D変換後のADRESH変数の値が比例することを思い出してください。ADRESHの値は0から255の間でした。では、
n=ADRESH;
とすると、0から255秒の待ち時間が作れることになります。

 ところで、半固定抵抗をよく見ると10個の目盛がついています。

1MΩ半固定抵抗.jpg
半固定抵抗の目盛

 目盛を目安にして切りのいい時間を単位にするにはどうしたらいいでしょう。たとえば、次のようにします。
n =  60*(ADRESH/26+1);
 ここでADRESH/26と割り算をしています。この割り算では小学校で習う整数のみの計算をしています(小数点以下を扱うときには変数の「型」を変えるなどします)。あまりは捨てられます。ADRESHが0から25では、ADRESH/26は0にADRESHが26から55では1に、ADRESHが234から255では9になります。つまりボリュームの角度が多少違っても、目盛と目盛の間ではおおよそ、ADRESH/26の値は一定になります。

 ADRESHは0から255の範囲で変化するので、ADRESH/26の結果は0から9になります。これに1を足すことで1から10になり、さらに60を掛けることで、nの値は60, 120, ..., 600と、とびとびの値になります。

■キッチン・タイマのmain関数
 キッチン・タイマのmain関数は次のようにしてみました。短時間で動作を確かめやすいように、nを計算するところで、1秒から10秒になるようにしています。1*を60*に変えると1分から60分になります。時間が来たらカッコーの鳴き声にしています。待ち時間の音を変えたり、時間が来たときの音を変えたり、いろいろと工夫をしてみてください。
void
main(void)
{
    int i, n;

    init();                 // 初期化

    GO_nDONE = 1;   // GO_nDONEを1にすると A-D 変換開始
    delay(10);      // 一定時間待つ
    GO_nDONE = 0;   // GO_nDONE を0にする

    n =  1*(ADRESH/26+1);    // ADRESHの値は0から255まで、26で割ると0から9になる
                            // それに1を足すと1から10。それの1倍なら、1から10秒、
                            // 60倍で1分から10分の設定時間になる

    for (i=0; i<n; i++) {
        beep(1500, 100);
        delay100ms(9);
    }

    // カッコーの鳴き声で知らせる
    for (;;) {
            beep(1220, 200);
               delayms(200);
               beep(980, 600);
               delay100ms(5);
    }
}
(光永 法明)

カテゴリ:

トラックバック

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





カテゴリ

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

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

Powered by
Movable Type 4.1
/*yahoo remove*/