我正在做一个Raspberry Pi项目,它根据3个PIR运动传感器中的哪一个是“感知运动”来显示不同的视频循环。当没有传感器感应到任何东西时,我想显示一个额外的视频。所以总共有4个视频:左,中,右,不活跃。在
使用Python3.4.2,我可以在传感器被激活时播放视频,但在没有任何传感器处于活动状态时,我很难播放视频。我原以为这是一个简单的“else”类从句,但显然不是。我试过许多不同的方法,但都没什么主意了。有人能帮我整合一个“无运动检测”返回代码吗?代码如下:
''' 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")
,这将非常有用。在
我设法解决了这个问题,并认为我会张贴它,以防有人想使用它。请注意,代码已发生了相当大的更改。它仍然使用非常低的CPU。唯一的区别是,这种代码更有效地捕捉运动,但代价是较高的错误读数。这可以通过调整PIR传感器上的旋钮来解决。同样的概念也适用于上面的代码。在
print
命令可以替换为您想调用的任何函数。在相关问题 更多 >
编程相关推荐