2017-01-28 68 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