やりたいこと
低温調理器の作成用に、タイマーを作成しました。
流儀的には、threadingを使用するのが良いのかなと思いましたが、自分の知識の範囲でさくっと作ってみました。
whileループでの使用を想定しておりまして、設定時間内であればTrueを返し続け、設定時間を超えるとFalseを返すという仕様です。
タイマーは、インターバルと、処理時間を事前に設定し稼働させます。
インターバルの時間を短くすると、処理時間の精度が向上します。
処理時間に求められる精度は、用途によってまちまちなので可変にしました。
低温調理の場合は、処理時間が数時間となることが多いのでさほど短いインターバルで回さなくても大丈夫でしょう。
python
import sys
import time
print('何時間後にとめますか?')
hour = float(input())
set_time = hour * 60*60
print(str(set_time) + '秒後にとめますね')
print('カウント間隔')
interval = float(input())
print(str(interval) + 'sec 間隔で数えます')
class Countdown_Timer:
def Timer(self,t):
time_now = time.time()
delta_time = time_now - start_time
while delta_time < t:
time_now = time.time()
delta_time = time_now - start_time
time.sleep(interval)
flag = True
return flag
else:
global time_measured
time_measured = delta_time
flag = False
return flag
timer = Countdown_Timer()
start_time = time.time()
print('start Timer')
while timer.Timer(set_time):
# print('Timer On')
pass
else:
print('Timer Off')
print('時間は ' + str(time_measured)+' 秒でした。')
print('誤差は ' + str(time_measured - set_time) + ' 秒です。')
低温調理では、処理時間を時間単位で設定することが多いため、処理時間の入力を時間単位としています。
起動すると、こんな感じになります。
>input()のエコーをなくしたい。
何時間後にとめますか?
0.002
7.199999999999999秒後にとめますね
カウント間隔
0.3
0.3sec 間隔で数えます
start Timer
Timer Off
時間は 7.243600845336914 秒でした。
誤差は 0.04360084533691477 秒です。