スポンサーリンク

Scratch

micro:bitで目覚まし時計を作る

Scratch

micro:bitとScratchを使って目覚まし時計を作ってみます。
現在の時間とアラームを鳴らす時間を入力して、音楽を鳴らすようにしてみます。

スポンサーリンク

使い方

1.起動すると「NOW」と表示されます。現在の時間を入力するモードになっている場合に表示されます。
2.現在の時間を入力します。
  Aボタンを押すと時間を入力できます。
  Bボタンを押しと分を入力できます。
  例えば、今が13時20分の場合は次のように入力します。
    Aボタンを14回押します(0から始まるので14回です。)
    Bボタンを21回押します。(0から始まるので21回です。)
     ちなみに、ボタンを1回押すごとに0H→1H→2H→3H・・・、0M→1M→2M→3M・・・と押した回数と時間、分がわかるように表示されます。
3.現在の時間入力が終わったらA+Bボタンを押します。
  「ALARM」と表示されて、アラーム時間を入力するモードに変わります。
4.アラームを鳴らしたい時間を入力します。
  入力方法は「2.現在の時間を入力します」と同じ方法です。
5.アラーム時間の入力が終わったらmicro:bitのロゴマークをタッチします。

6.アラームまでのカウントダウンが始まります。
 「START」と表示され、次にアラームが鳴るまでの残り時間がミリ秒で表示されます。

プログラムの解説

プログラムの中身を処理順に解説していきましょう。

初期化処理

まずは、このプログラムで使う変数を初期化します。
初期化というのは、プログラムの中で利用する変数をリセットする処理のことです。
新しいプログラミング言語では必要ないことが多いのですが、念のため初期化をする習慣にしておく方が良いでしょう。

変数「時間」:現在の時間を登録する変数を初期化します。
       Aボタンを押すと1ずつ増える変数です。
       1回目は0にしたいので、初期化で-1に設定しておきます。
変数「分」:現在の分を登録する変数を初期化します。
      「時間」と同じ理由で-1にしておきます。
変数「アラート時間」:アラートが鳴る時間を登録する変数を初期化します。
           「時間」と同じ理由で-1にしておきます。
変数「アラート分」:アラートが鳴る分を登録する変数を初期化します。
          「時間」と同じ理由で-1にしておきます。
変数「入力モード」:現在時間を入力するモードか、アラーム時間を入力するモードか管理する変数です。
変数「今の時間ミリ秒」:現在の時間をミリ秒に変換して登録する変数を初期化します。
変数「ALARMの時間ミリ秒」:アラームが鳴る時間をミリ秒に変換して登録する変数を初期化します。
変数「ALARMまでのミリ秒」:現在時間からアラームが鳴るまでの時間をミリ秒で登録する変数を初期化します。
変数「今の時間(時間)」:現在の時間の時間の部分をミリ秒に変換した値を入れる変数です。
変数「今の時間(分)」:現在の時間の分の部分をミリ秒に変換した値を入れる変数です。
変数「ALARMの時間(時間)」:アラームのなる時間の時間の部分をミリ秒に変換した値を入れる変数です。
変数「ALARMの時間(分)」:アラームのなる時間の分の部分をミリ秒に変換した値を入れる変数です。

「NOW」を表示します。
 「最初だけ」ブロックの中ならどこで実行してもOKです。

モード切替

現在の時間を入力するモードから、アラーム時間を入力するモードに切り替えるための処理です。

A,Bボタンを同時に押した場合にモードの切り替えを行います。
モードは変数「入力モード」の値が0または1かで判断します。
0の場合は現在の時間入力モード。
1の場合はアラームの時間入力モードとしています。

入力モードを切り替えたことがわかるように、「ALARM」と表示するようにします。

Aボタンを押したときの処理

Aボタンを押したときに時間を増やす処理をしています。


大きく、2つの塊があります。
「もし 入力モード = 0 なら」と「でなければ」の塊です。
入力モード=0の場合は現在の時間の時間部分を入力します。

現在時間の入力

「もし 時間 = 23 なら」のブロックはすでに23時までに入力をされていたら0時に戻す処理をしています。
一瞬ですが、時間を-1にしています。
次の処理で、すぐに1増やすので0になります。

Aボタンが押された場合に1増やしています。
続けて「時間」と「H」を表示して、入力された時間がわかるようにしています。

アラーム時間の入力

モードの値によって、アラーム時間の入力か、現在時間の入力かを切り分けています。
処理の中身は現在時間の入力と同じです。

コメント

タイトルとURLをコピーしました