2016-08-12 90 views
3

我想打開,保持打開狀態6秒鐘,並且每5分鐘關閉一個繼電器,其餘代碼正常運行。每隔5分鐘運行一部分代碼,獨立於其他命令

例如:

GPIO.output(18, 1) 
sleep(6) 
GPIO.output(18, 0) 
sleep(300) 

但是,如果沒有在這個延遲其餘程序堆棧。我的Python代碼是:

import RPi.GPIO as GPIO 
from time import sleep 

GPIO.setmode(GPIO.BOARD) 
GPIO.setup(13, GPIO.IN, GPIO.PUD_UP) 
GPIO.setup(7,GPIO.OUT) 
GPIO.setup(37, GPIO.OUT) 
Hologram = '/home/pi/Hologram/Hologram.mp4' 

from subprocess import Popen 

firstTimeOpen=0 

while True: 

     doorIsOpen = GPIO.input(13) 

     if doorIsOpen==0 and firstTimeOpen == 0: 
         firstTimeOpen=1 
         GPIO.output(7, 0) 
         GPIO.output(37, 0) 
         sleep(0.5) 

     if doorIsOpen==1 and firstTimeOpen == 1: 
       GPIO.output(7, 1) 
       GPIO.output(37, 1) 
       omxp = Popen(['omxplayer' ,Hologram]) 
       sleep(87) 
       GPIO.output(7, 0) 
       GPIO.output(37, 0) 
       firstTimeOpen=0 
       sleep(0.5) 
+0

非常簡單的問題。如果你通過谷歌搜索和你的代碼,你會自己找到答案。請下次小心,先試試自己。 –

回答

0

你可以把這個邏輯在不同的線程。將停止凍結您的程序,並且不會影響其工作流程。

+1

這不提供問題的答案。一旦你贏得了足夠的聲譽,你就可以評論任何帖子。相反,提供不需要提問者澄清的答案。 – grooveplex

+0

不幸的是,我是Python新手,我不知道我該怎麼做。你能幫助我如何在那之後形成代碼嗎? – LockNTension

+0

上面的答案我的顯示,完美(holdenweb答案)抱歉不提供代碼的答案。我目前無法寫出 – RoughTomato

4

線程提供了一個方便的方法來做到這一點。我通常創建一個threading.Thread子類,其run方法是要在單獨的線程中運行的代碼。所以,你想是這樣的:

class BackgroundRunner(threading.thread): 
    def run(self): 
     while True: 
      GPIO.output(18, 1) 
      sleep(6) 
      GPIO.output(18, 0) 
      sleep(300) 

然後,你開始運行的主代碼之前,使用

bg_runner = BackgroundRunner() 
bg_runner.start() 
3

除了建議穿線方法,你也可以使用Python信號模塊使用中斷。中斷比線程便宜,這在您選擇的平臺上可能更合適。

你可以在這裏找到更多的例子:https://docs.python.org/2/library/signal.html

舉個例子:

import signal, os 

def handler(signum, frame): 
    print 'Signal handler called with signal', signum 
    handler.counter += 1 

    if not handler.counter % (300/6): 
     GPIO.output(18, 0) 
    else: 
     GPIO.output(18, 1) 

handler.counter = 0 

signal.signal(signal.ITIMER_REAL, handler) 
signal.setitimer(signal.ITIMER_REAL, 0, 6) 
+0

signal.signal(signal.ITIMER_REAL,處理程序) ValueError:信號數量超出範圍 – LockNTension