2016-04-17 11 views
-3

私はpythonで一日の特定の時間帯にLEDライトを点灯させ、その後はそれをオフにする簡単なコードを書こうとしています。私はif文で時間枠を指定しようとしましたが、このコードを実行するたびにif文の "else"部分だけが動作します。私はHHMMの私の時間形式を0745のフラットな値と比較することを許可されていませんか?どうすれば、朝に真夜中から7時45分までの間に滞在することができますか?どんな助けや方向性も大いにありがとう!時間を値と比較してPythonのif文を書く方法

import time 
import RPi.GPIO as GPIO 
GPIO.setwarnings(False) 
GPIO.setmode(GPIO.BOARD) 
GPIO.setup(3,GPIO.OUT) 
print (time.strftime("%H%M")) 

while True: 
    if time.strftime("%H%M") <= 0745: 
     GPIO.output(3,1) 
    else: 
     GPIO.output(3,0) 
+0

をあなたは常にLEDにオン/オフ記述する必要はありません。ブール値を使用すると、 'not is_on 'と' if is_on'のどちらか一方だけを確実に書き込むことができます。 – jDo

+2

'0745'は8進整数リテラル(10進数では' 485')です。文字列。あなたは文字列「0745」を意味すると思います。 – jonrsharpe

+0

'time.strftime("%H%M ")'は 'str'、0745は' int'です。それらを同じタイプにします。 –

答えて

0

datetimeを使用してください。

import datetime 
while True: 
    time = datetime.datetime.now() 
    morning = time.replace(hour=7, minute=45, second=0, microsecond=0) 
    if time <= morning: 
     print("turn on") 
    else: 
     print("turn off") 
0

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) 
関連する問題