我正在开发一个Raspberry Pi项目,该项目根据3个PIR运动传感器中的哪个传感器显示不同的视频循环"感应运动"。当没有传感器感应任何东西时,我想显示一个额外的视频。所以总共有4个视频:左,中,右,不活跃。
使用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 :(得分: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
命令可以替换为您要调用的任何函数。