Pythonは日付と時刻で動作するようにデータ型を提供datetimeモジュールを持っています。あなたはこのようなあなたの質問からコードを書くことができ
:
import datetime
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(3,GPIO.OUT)
while True:
if datetime.datetime.now() <= datetime.datetime.combine(
datetime.date.today(),
datetime.time(7, 45)
):
GPIO.output(3,1)
else:
GPIO.output(3,0)
しかし、これはまだそれを得ることができるように、プログラムは常にwhileループでスピンし、できるだけ多くのCPUサイクルを吸うという問題があります。
あなたが代わりにこのような何かを行うことができます:
import time
import datetime
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(3,GPIO.OUT)
schedule = [
(datetime.time(0, 0), 0),
(datetime.time(7, 45), 1),
(datetime.time(18, 0), 0)
]
def switchLight():
"""
Switch the light to the proper state according to the schedule.
Return the next time the light needs to be switched.
"""
today = datetime.date.today()
schedule_index = 0
while schedule_index < len(schedule) and \
datetime.datetime.now() > datetime.datetime.combine(today, schedule[schedule_index][0]):
schedule_index += 1
GPIO.output(3, schedule[schedule_index][1])
# calculate next switching time
schedule_index += 1
if schedule_index == len(schedule):
schedule_index = 0
today = today + datetime.timedelta(days=1)
return datetime.datetime.combine(today, schedule[schedule_index][0])
while True:
next_time = switchLight()
time.sleep((next_time - datetime.datetime.now()).seconds + 1)
をあなたは常にLEDにオン/オフ記述する必要はありません。ブール値を使用すると、 'not is_on 'と' if is_on'のどちらか一方だけを確実に書き込むことができます。 – jDo
'0745'は8進整数リテラル(10進数では' 485')です。文字列。あなたは文字列「0745」を意味すると思います。 – jonrsharpe
'time.strftime("%H%M ")'は 'str'、0745は' int'です。それらを同じタイプにします。 –