2016-10-07 59 views
0

我正在開發Raspberry Pi項目,該項目根據3個PIR運動傳感器中的哪一個「感測運動」顯示不同的視頻環路。當沒有傳感器感應到任何東西時,我想顯示一個額外的視頻。所以總共有4個視頻:左,中,右,不活躍。當PIR運動傳感器不使用樹莓派傳感時,其他類似子句

使用Python 3.4.2,我設法在傳感器被激活時播放視頻,但是當沒有任何傳感器處於活動狀態時,我無法播放視頻。我認爲這將是一個簡單的'其他'類似的條款,但顯然它不是。我嘗試了許多不同的方法,但已經用完了想法。有人可以幫我整合一個「無運動檢測」返回代碼嗎?代碼如下:

''' Import required stuff ''' 
import RPi.GPIO as GPIO  #GPIO 
import time     #for delay 
import subprocess   #for omxplayer 

''' GPIO setup ''' 
GPIO.setmode(GPIO.BCM) #GPIO setmode 
PIR_PIN_L = 23   #define left pin 
PIR_PIN_R = 24   #define right pin 
PIR_PIN_M = 25   #define middle pin 

GPIO.setup(PIR_PIN_L, GPIO.IN) #set left pin 
GPIO.setup(PIR_PIN_R, GPIO.IN) #set right pin 
GPIO.setup(PIR_PIN_M, GPIO.IN) #set middle pin 

'''Definitions ''' 
def MOTIONL(PIR_PIN_L):     #define motion on left 
    print("Motion Detected on Left!") #output if motion detected 

def MOTIONR(PIR_PIN_R):     #define motion on right 
    print("Motion Detected on Right!") #output if motion detected 

def MOTIONM(PIR_PIN_M):     #define motion in middle 
    print("Motion Detected at Middle!") #output if motion detected 

''' Initiation ''' 
print("PIR Module Test (CTRL+C to exit)") 
time.sleep(4) 
print("Ready") 

''' Sensing ''' 
try: 
    GPIO.add_event_detect(PIR_PIN_L, GPIO.RISING, callback=MOTIONL) 
    GPIO.add_event_detect(PIR_PIN_M, GPIO.RISING, callback=MOTIONM) 
    GPIO.add_event_detect(PIR_PIN_R, GPIO.RISING, callback=MOTIONR) 

    while 1: 
     time.sleep(100) 

except KeyboardInterrupt: 
    print("Quit") 
    GPIO.cleanup() 

我和print("Motion detected ...")爲了簡單取代了視頻部分。如果在沒有激活傳感器的情況下可以添加print("No motion detected"),這將非常有幫助。

回答

0

我設法解決了這個問題,並認爲我會張貼它以防萬一有人想使用它。請注意,代碼已經發生了相當大的變化。它仍然使用非常低的CPU。唯一的區別是,這個代碼在拾取動作時更有效率,但代價是更高的錯誤讀數。這可以通過調整PIR傳感器上的旋鈕來解決。上面的代碼可以應用相同的概念。

''' Import required stuff ''' 

import RPi.GPIO as GPIO  #GPIO 
import time     #for delay 

''' GPIO setup ''' 

GPIO.setmode(GPIO.BCM) #GPIO setmode 
PIR_PIN_L = 23   #define left pin 
PIR_PIN_R = 24   #define right pin 
PIR_PIN_M = 25   #define middle pin 

GPIO.setup(PIR_PIN_L, GPIO.IN) #set left pin 
GPIO.setup(PIR_PIN_R, GPIO.IN) #set right pin 
GPIO.setup(PIR_PIN_M, GPIO.IN) #set middle pin 

'''Definitions ''' 

def MOTIONL():       #define motion on left 
    if GPIO.input(PIR_PIN_L)==1 :  #trigger condtion left being active 
       print("Motion Detected on Left") #output 
       time.sleep(3)   

def MOTIONR():       #define motion on right 
    if GPIO.input(PIR_PIN_R)==1 :  #trigger condtion right being active 
       print("Motion Detected on Right") #output 
       time.sleep(3)  

def MOTIONM():       #define motion in middle 
    if GPIO.input(PIR_PIN_M)==1 :  #trigger condtion middle being active 
       print("Motion Detected on Middle") #output 
       time.sleep(3)  
def NOMOTION() : 
    if GPIO.input(PIR_PIN_L)==0 and GPIO.input(PIR_PIN_R)==0 and  GPIO.input(PIR_PIN_M)==0 : 
    #above trigger condition is no sensor being active 
       print("No Motion Detected") #output 
       time.sleep(3)  

''' Initiation ''' 

print("PIR Module Test (CTRL+C to exit)") 
time.sleep(4) 
print("Ready") 

''' Sensing ''' 

try: 

       while 1: #calls defined functions simulatanously 
           NOMOTION() 
           MOTIONR() 
           MOTIONL() 
           MOTIONM() 

except KeyboardInterrupt: #CTRL and C will reset shell 
       print("Quit") 
       GPIO.cleanup() 

print命令可以用你想調用任何功能所取代。

相關問題