2016-10-11 75 views
0

我剛拿起我的第一個Raspberry Pi和2通道中繼。我試圖學習如何在Python中編寫代碼,所以我認爲Pi是一個很好的起點。我對通過GPIO引腳進行繼電器的時間有疑問。Raspberry Pi:Python試試/除了循環

首先,雖然我使用Raspbian Pixel,並且正在通過Gedit編輯我的腳本。請參閱下面的腳本我到目前爲止:

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

GPIO.setmode(GPIO.BCM) 

# init list with pin numbers 
pinList = [14] 

# loop through pins and set mode and state to 'high' 
for i in pinList: 
    GPIO.setup(i, GPIO.OUT) 
    GPIO.output(i, GPIO.HIGH) 

# time to sleep between operations in the main loop 
SleepTimeL = 60 #1 minute 

# main loop 
try: 
    GPIO.output(14, GPIO.LOW) 
    print "open" 
    time.sleep(SleepTimeL); 
    GPIO.cleanup() 

#Reset GPIO settings 
    GPIO.cleanup() 

# end program cleanly 
except KeyboardInterrupt: 
    print "done" 

現在工作得很好,它會打開連接到引腳14沒有問題的繼電器。它按要求循環60秒,然後結束程序。一旦程序結束,GPIO設置被重置,繼電器關閉,但這是程序的結束,這是我的問題開始的地方。

我想要這個腳本是打開繼電器60秒,然後關閉它180秒。一旦達到180秒,它必須重新運行「嘗試」語句並打開繼電器60秒鐘,等等。總之,我想要一個無限循環,只能通過取消腳本運行來中斷循環。我不確定如何告訴Python關閉繼電器180秒,然後重新運行try語句,或者如何使它成爲無限循環。

我真的很感謝社區的一些意見。任何反饋或協助,不勝感激。謝謝大家。

+0

請編輯您的帖子以更正您的縮進。 –

+0

只需使用'while True:'循環 – reptilicus

+0

HiRobᵩ,我按照要求編輯它。 – Safjoe

回答

0

只需使用一個while True循環,是這樣的:

# main loop 
while True: 
    GPIO.output(14, GPIO.LOW) 
    print "open" 
    time.sleep(SleepTimeL); 
GPIO.cleanup() 
print "done" 
+0

感謝Reptilicus ... – Safjoe

+0

感謝Reptilicus, 我把它作爲工作如下: #時間在主迴路 打開= 60 關= 180 #主循環 而操作間睡覺真: GPIO.output(14 GPIO.LOW) 打印 「打開」 time.sleep(開放) GPIO.output(14 GPIO.HIGH) 打印 「關閉」 time.sleep(閉) 工作完成。再次感謝:-) – Safjoe

+0

我的歉意,我不知道那裏發生了什麼:-) – Safjoe

0

我reptilicus同意,你只需要添加一個while循環。 「True」將永遠運行,直到你按下ctrl-C打破。在循環之前,您只需添加第二個延遲就可以關閉繼電器180秒。您可以創建一個不同的睡眠時間變量,或者我只是乘以2。

# main loop 
while True: 
    try: 
    GPIO.output(14, GPIO.LOW) 
    print "open" 
    time.sleep(SleepTimeL); 
    GPIO.cleanup() 

    #Reset GPIO settings 
    GPIO.cleanup() 
    time.sleep(2*SleepTimeL) 

    # end program cleanly 
    except KeyboardInterrupt: 
    print "done"