当PIR运动传感器未使用树莓皮感应时,elselike子句

2024-07-04 15:12:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个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"),这将非常有用。在


Tags: import视频gpiotimeonsetuppin传感器
1条回答
网友
1楼 · 发布于 2024-07-04 15:12:28

我设法解决了这个问题,并认为我会张贴它,以防有人想使用它。请注意,代码已发生了相当大的更改。它仍然使用非常低的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 命令可以替换为您想调用的任何函数。在

相关问题 更多 >

    热门问题