Python - time.sleep

时间:2018-03-19 06:35:03

标签: python timer raspberry-pi sleep

你好,有没有替代time.sleep? 因为我想让我的LED以确切的Hz值闪烁,因为呼叫time.sleep也需要时间,因此闪烁需要的时间超过预期。

#!/usr/bin/python
    import RPi.GPIO as GPIO
    import time
    from threading import Thread

    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(32, GPIO.IN)

    def blink(port, hz):
        GPIO.setup(port, GPIO.OUT)
        while True:
            if GPIO.input(32) == 1:                 //lever activated?
                GPIO.output(port, GPIO.HIGH)
                time.sleep(0.5/hz)
                GPIO.output(port, GPIO.LOW)
                time.sleep(0.5/hz)
            else:
                GPIO.output(port, GPIO.LOW)
    #to make it easier to add new LED
    def start(port, hz):
        Thread(target=blink, args=(port, hz)).start()
    #to add LED insert start(GPIOport, Hz)
    start(15, 2)
    start(16, 4)
    start(18, 6)
    start(22, 12)
    start(29, 24)

1 个答案:

答案 0 :(得分:1)

要保持频率,请像这样使用睡眠:

time.sleep(desired_time - time.time())

这样小的延迟就不会加起来。

dtm = time.time()
pulse = 0.5/Hz
while True:
    dtm += pulse
    time.sleep(dtm - time.time())
    # LED ON
    dtm += pulse
    time.sleep(dtm - time.time())
    # LED OFF

如果不关心确切的占空比(即开/关比),可以简化循环:

while True:
    time.sleep(pulse)
    # LED ON
    dtm += 2*pulse
    time.sleep(dtm - time.time())
    # LED OFF

更新,停止/恢复闪烁,查看评论,presudocode

 pulse = 0.5/Hz
 while True:
     dtm = time.time()
     while input32 == 1:
          ... blink LEDs ...
     while not input32 == 1:
         time.sleep(0.1)