#python #python-3.x #raspberry-pi3
#python #python-3.x #raspberry-pi3
Вопрос:
Я работаю над проектом Raspberry Pi, который отображает другой цикл видео в зависимости от того, какой из 3 датчиков движения PIR «распознает движение». Когда никакие датчики ничего не обнаруживают, я хочу отобразить дополнительное видео. Итак, всего есть 4 видео: левое, среднее, правое, неактивное.
Используя Python 3.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 ...")
на. Если вы можете добавить a print("No motion detected")
, когда датчики не активированы, это было бы очень полезно.
Ответ №1:
Мне удалось решить проблему, и я подумал, что опубликую ее на случай, если кто-то захочет ее использовать. Обратите внимание, что код был значительно изменен. Он по-прежнему использует очень низкий процессор. Единственное отличие заключается в том, что этот код более эффективен при обнаружении движений, но за счет более высоких ложных показаний. Это можно исправить, отрегулировав ручки на датчике 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
команды могут быть заменены любой функцией, которую вы хотите вызвать.