Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

if文を使って経過時間後にfalseに移行させることはできるのでしょうか。

LEDを指定の時間後に自動停止させるためにプログラムを組んでいます。

import datetime

GPIO = webiopi.GPIO
dt1 = datetime.datetime.now()
dt2 = dt1 + datetime.timedelta(seconds=5)

def loop():
    if dt1 > dt2 :
     LED点灯
  else:
     LED消灯

if文をつかって、現在時刻を取得し、5秒経過後に自動的にfalseに移行してほしいプログラムを考えましたが、
これではおそらく、現在時刻より5秒少なかったらture、ということでずっとLEDが点灯しっぱなしということになります。
5秒後にfalseにいこうさせることはif文で可能なのでしょうか。
if文では難しいですか?

0

3Answer

5秒後にfalseにいこうさせることはif文で可能なのでしょうか。

まず、単純に5秒後に制御したいだけならば、こんな感じでしょうか。

import time

print ("LED点灯")
time.sleep(5)
print ("LED消灯")

もうちょっと複雑に制御したいならば、while True: で当該ブロックをぐるぐる回す感じでしょうか。その際には、ぐるぐる回すときに判定のための現在時刻を更新してあげる必要があります。

下記サンプルでは、 100ms単位で「5秒経過したか?」を検知する単純な例になります。また、ついでに点滅まで作ってます。

import time
import datetime

print ("LED点灯")
isOn = True
endTime = datetime.datetime.now() + datetime.timedelta(seconds=5)

while True : # Main Loop
    nowTime = datetime.datetime.now()
    if nowTime > endTime :
        isOn = not isOn
        if isOn :
            print ("LED点灯 " )
        else :
            print ("LED消灯" )

        endTime = datetime.datetime.now() + datetime.timedelta(seconds=5)
    time.sleep(0.1) # 0.1 sec = 100 msec

0Like

Comments

  1. @morita05041984

    Questioner

    ありがとうございます!!
    狙った挙動は確認取れました

    dt1 = datetime.datetime.now()
    dt2 = dt1 + datetime.timedelta(seconds=5)


    dt1 > dt2
    ↑そもそもここが逆ですね。
import time

print ("LED点灯")
time.sleep(5)  /*()の所は、何秒たった止まる止まらない、という意味です
print ("LED消灯")

0Like

Comments

  1. Sleepは、スリープです
  2. @morita05041984

    Questioner

    こんな初歩的なことでも良かったんですね。複雑に考えすぎて、深みにハマってましたありがとうございます

Your answer might help someone💌