見出し画像

Micro:bitでPythonをはじめる 6/タイマーの作成

こんにちはロック204チャンネルです。
この動画では「micro:bitでpythonを始める 6 タイマーの作成」をお送りします。

作成するタイマーの実行状況

こちらがプログラムコードの前半となります。
最初の部分で必要なモジュールをインポートしています。
3行目の「time」は時間を使うモジュールです。
また4行の「music」は音を発生させるためのモジュールとなります。
そして5行では「set_time」はタイマーの設定時間を入れる変数とします。既定値を1分とします。
「start_time」はタイマーのスタート時の稼働時間を入れる変数とします。
7行の「nokori」は残り時間を入れる変数とします。
そしてプログラムがスタートするとディスプレイに「set time=1」と表示されます。
9行目の「mode」はタイマーの状態を数値で設定する変数とします。
最初は0としてまだ時間が設定されていない状態とします。

こちらはwhileによる「ずっと」繰り返されるループになります。
modeが0でボタンaが押された場合には、14行でset_timeを一ずつ増やして行きます。
最初はset_timeは1ですので、Aボタンを押すと2,次にもう一回押すと3というような形で増えていきます。
そして15行のif文ではset_timeが10を超えた場合にはset_timeを1に戻すという操作が行われます。
17行では、設定されたset_timeをディスプレイに表示します。
18行はmodeが0かつ、bボタンが押された場合の処理を書いています。
この条件が成立した場合、modeを1としてタイマーがスタートした状態であることを設定します。
そして20行で「s」を表示し、次の行で現在の稼働時間をstart_timeに代入し、音を22行で鳴らします。


こちらはmodeが1になった場合の処理を書いています。
つまりタイマーがスタート中である場合の処理になります。
26行目は、変数nokoriに、現在の稼働時間からスタート時間を引いて1000で割り秒に直し、さらに60で割った商を求め、set_timeとの差を求めて整数に変換したものを入れます。
残り時間が1分以内になったら残り時間を秒で表示するために28行で変数残りが1でないか確認をします
そして残りが1分であった場合には29行のように残り時間を秒で計算をします。
そして30行で残り時間を表示します。
31行は残り時間が0以下になれば、ディスプレイに「END」を表示し、内蔵された「music.PRELUDE」を演奏します。
そしてmodeを0として、再び時間設定が可能とします。
以上でプログラムの説明を終わります。



# timer01
from microbit import *
import time #時間を扱うモジュール
import music #音を発生するモジュール
set_time=1 #タイマーの設定時間を1分とする
start_time=0 #タイマーのスタート時の稼働時間を入れる
nokori=0 #残り時間を入れる
display.scroll('set time='+str(set_time))
mode=0 #まだ時間が設定されていない

# Code in a 'while True:' loop repeats forever
while True:
    if mode==0 and button_a.was_pressed():
        set_time+=1 #設定時間を1分増やす
        if set_time>10: #設定時間が10分を超えると1分に戻す
            set_time=1
        display.scroll(set_time)
    if mode==0 and button_b.was_pressed(): #タイマースタート
        mode=1 #時間がセットされた。タイマースタート
        display.scroll('S')
        start_time=time.ticks_ms() #現在の稼働時間を代入
        music.play(['c'])  
        
    if mode==1: #タイマースタート中
        #残り時間が1分より多い場合は残り時間を分で計算(//は商を求める)
        nokori=int(set_time-(time.ticks_ms()-start_time)/1000//60)
        #残り時間が1分以内になったら残り時間を秒で計算
        if nokori==1:
            nokori=int(set_time*60-(time.ticks_ms()-start_time)/1000)
        display.scroll(nokori)  #残り時間を表示         if nokori<=0:
            display.scroll('END')
            music.play(music.PRELUDE)
            mode=0 #時間設定が可能
            
        
        


この記事が気に入ったらサポートをしてみませんか?