2017-01-28 42 views
-1

我试图把在三个不同的LED,但我希望他们关闭在不同的时间,但这个看起来不可能的LED ....:哭: 这里是我的代码:多个在不同时间

import RPi.GPIO as GPIO 
import time from threading 
import Thread 
def led1(): 
GPIO.setmode(GPIO.BOARD) 
GPIO.setup(36, GPIO.OUT) 
GPIO.output(36,1) 
time.sleep(3) 
GPIO.output(36,0) 
GPIO.setwarnings(False) 
def led2(): GPIO.setmode(GPIO.BOARD) 
GPIO.setup(38, GPIO.OUT) 
GPIO.output(38,1) 
time.sleep(5) 
GPIO.output(38,0) 
GPIO.setwarnings(False) 
def led3(): 
GPIO.setmode(GPIO.BOARD) 
GPIO.setup(40, GPIO.OUT) 
GPIO.output(40,1) 
time.sleep(7) 
GPIO.output(40,0) 
GPIO.setwarnings(False) 
thread1= Thread(target = led1) 
thread2= Thread(target = led2) 
thread3= Thread(target = led3) 
thread1.run() thread2.run() 
thread3.run() 
##thread1.join() // not sure if I have to put that or not 
##thread2.join() 
##thread3.join() 
GPIO.cleanup() 

回答

0

为什么不做这样的事情?

import RPi.GPIO as GPIO 
import time 

GPIO.setmode(GPIO.BOARD) 
GPIO.setup(36, GPIO.OUT) 
GPIO.setup(38, GPIO.OUT) 
GPIO.setup(40, GPIO.OUT) 
GPIO.setwarnings(False) 

GPIO.output(36,1) 
GPIO.output(38,1) 
GPIO.output(40,1) 

time.sleep(3) 
GPIO.output(36,0) 
time.sleep(2) 
GPIO.output(38,0) 
time.sleep(2) 
GPIO.output(40,0) 

GPIO.cleanup() 

编辑:如果你不知道的时候每个LED将是对:

import RPi.GPIO as GPIO 
import time 

GPIO.setmode(GPIO.BOARD) 
GPIO.setup(36, GPIO.OUT) 
GPIO.setup(38, GPIO.OUT) 
GPIO.setup(40, GPIO.OUT) 
GPIO.setwarnings(False) 

led1time = 3 
led2time = 5 
led3time = 7 
m = max(led1time, led2time, led3time) 

GPIO.output(36,1) 
GPIO.output(38,1) 
GPIO.output(40,1) 

t = 0 
while t <= m: 
    if t >= led1time: 
     GPIO.output(36,0) 
    if t >= led2time: 
     GPIO.output(38,0) 
    if t >= led3time: 
     GPIO.output(40,0) 
    time.sleep(0.1) 
    t += 0.1 

GPIO.cleanup() 

您现在可以设置每个LED多久会在与0.1秒准确性,你可以通过用较低的数字替换任何出现的0.1来提高精度。

+0

问题在于,第二个需要在关闭之前等待2 + 3秒,第三个需要3 + 2 + 2秒,并且代码的下一个阶段是要求用户输入时间所以如果t2低于t1,它将不起作用 –

+0

我已经更新了我的答案,将来这个信息应该包含在问题中。 – BluCode