チャレンジ課題として、タイマーとしての課題を解決します。
チャレンジ課題
これから3回に分けて、基礎編最後のチャレンジ課題に取り組んでいただこうと思います。
課題は今までの説明範囲内で解ける内容にしました。C言語も今まで出てきた文法の範囲内でできます。
自分でブログラムを作ってみると、動いたけどこれで正解なのか不安になるかもしれません。でもものづくりに正解はありません。動けば正解です。
どうしてもわからない場合、お問い合わせフォームかコメント欄からお問い合わせいただければと思います。
タイマーとしての課題
前回、やっとタイマーとして基本的な回路とプログラムが完成しました。
ただ、、、いろいろ不満はありますよね。
まず、時間になったらブザーを鳴らしましたが、「ピーッ」となり続けるので耳障りですし、アラーム音っぽくないです。
それと、時間がきてブザーが鳴ったら、電源を切らないと元に戻らない、というのもタイマーとしてどうかしてます。市販のタイマーを買ってきて説明書を見たら「スイッチを押すとタイマーがスタートします。時間がきたらアラーム音が鳴りますので、止める場合は電源をお切りください」なんていう説明が書いてあったら、とりあえず「アラーム音止める機能ぐらいつけろよ」ってツッコミますよね。
ということで、今回はチャレンジ課題としてこれらの課題を解決していただこうと思います。
アラーム音を変える
最初はアラーム音を変えてみましょう。アラーム音っぽい音のパターンというのは個人で異なると思いますので、ご自分の好きなパターンで鳴らしてみましょう。
こちらでいろいろと時間調整してみたところ、
- 60ms鳴らす
- 60ms止める
- 60ms鳴らす
- 60ms止める
- 100ms鳴らす
- 600ms止める
とアラーム音を制御すると「ピピピーッ」って感じになりました。「ピピピッ」って感じにするには3回目のアラームを60ms鳴らすようにします。
ブザーを鳴らすのは「LATA4 = 1;」、止めるのは「LATA4 = 0;」でしたよね。あと指定した時間を待つのは「__delay_ms();」(単位はms)でした。
あとは、「ピピピーッ」をずっと繰り返せばいいので、while文で作れそうです。
それではアラーム音を変えて見ましょう。
スイッチを押してブザーを止めて元の状態に戻る
以前、保険のおばさんが保険を勧めてきたので掛け金や払戻金を計算してもらったところ、電卓で計算するのはいいのですが、数字を打ち間違えると電卓の電源をOFFにして、再度ONにして最初から計算していました。その時は「Cボタン(クリアボタン)があるのに、、、」と思ったのですが、よく考えると「Cボタン」と「ACボタン」って、その働きの違いとかわかりづらいので、電卓のユーザI/Fの方が悪いのかもしれません。電源ボタンはその働きは明快ですので、これを超えるようなわかりやすいボタンが必要なのかもしれません。
このようなケースもありますので、タイマーを切るには電源OFFでもいいのかもしれませんが、せっかくスイッチがありますので、スイッチで制御できるようにしましょう。
以下の仕様を追加して見てください。
「アラーム音が鳴ったら、スイッチを押すとアラーム音が停止して、最初の状態に戻る」
まず、前回作成したプログラムにこの機能を入れることを考えてみます。一番最後にブザーを鳴らすために「LATA4 = 1;」としていますので、この後にスイッチが押されるまで「while(RA3);」でそのまま待ちます。スイッチが押されたら最初に戻るように変更します。
次に、先ほどアラーム音を変えた場合ですが、こちらはちょっと工夫が必要です。
アラーム音を「ピピピッ」と鳴らしている間の処理は以下のようなものです。
- 60ms鳴らす
- 60ms止める
- 60ms鳴らす
- 60ms止める
- 100ms鳴らす
- 600ms止める
この間にスイッチが押されているかの判定を行うのですが、最後の600ms止めるところでは、おそらく「__delay_ms(600);」にしていると思います。この間にスイッチが押されて離された場合、検知ができませんので、この部分の改良が必要です。
このような実装をするものの、一つのボタンで複数の機能を持たせるのはユーザI/F観点ではわかりづらいかもしれないですね。。。
更新履歴
日付 | 内容 |
---|---|
2016.12.5 | 新規投稿 |