2017-03-16 30 views
0

我正在嘗試編寫一個腳本,用於監控來自PIR傳感器以及開關的輸入。計劃是傳感器將繼續運行,並且只有在檢測到運動時纔會從附加的網絡攝像頭髮送捕獲。如果它被激活,交換機將發送一個捕獲。兩者都將通過電子郵件發送捕獲。這是代碼。兩個if語句和一個腳本中的操作?

import RPi.GPIO as GPIO 
import time 
import os 

GPIO.setwarnings(False) 
#GPIO.setmode(GPIO.BOARD) 
GPIO.setmode(GPIO.BCM) 
GPIO.setup(17, GPIO.IN)   #Read output from PIR motion sensor 
GPIO.setup(4, GPIO.OUT)   #LED output pin 
GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_UP) 



while True: 

     input_state = GPIO.input(26) 

     i=GPIO.input(17) 

     if input_state == False: 
        print('DING DONG') 
      os.system("python buzztest.py") 
        #GPIO.output(4, 0) #Turn OFF LED 
       #GPIO.output(4, 0) #Turn ON LED 
       #time.sleep(1) 
       #GPIO.output(4, 0) #Turn OFF LED 
       #os.system("python doorbellpost.py") 
      os.system("fswebcam -r 640x480 --no-banner /root/Desktop/codes/ringcap/ringcap.jpg") 
      os.system("python mailpic.py") 
       time.sleep(1) 


    if i==0:     
    #When output from motion sensor is LOW 
     print "No intruders detected",i 
     #GPIO.output(4, 0) #Turn OFF LED 
     time.sleep(2) 
    elif i==1:    #When output from motion sensor is HIGH 
     print "Intruder detected!",i 
     #GPIO.output(4, 1) #Turn ON LED 
      os.system("fswebcam -r 640x480 --no-banner /root/Desktop/codes/motioncap/motcap.jpg") 
     os.system("python motmail.py") 
     time.sleep(2)  


GPIO.cleanup() 

該腳本還調用其他腳本,即針對門鈴和運動傳感器的相應捕獲的單獨電子郵件腳本。任何幫助是極大的讚賞。謝謝。

編輯。對不起,我忘了這個問題。那麼是否有另一種方法來實現呢?兩個if語句一次運行?當我運行程序時,傳感器語句運行,但激活開關有一些問題,即'叮咚'有時不會激活。

+0

什麼問題? [問] – Julien

+0

已編輯。我忘記了我的壞處。 –

回答

1

你可以使用幫助同時運行兩個代碼的python模塊multiprocessing可以提高你的性能。

from multiprocessing import Process 
import RPi.GPIO as GPIO 
import time 
import os 

GPIO.setwarnings(False) 
#GPIO.setmode(GPIO.BOARD) 
GPIO.setmode(GPIO.BCM) 
GPIO.setup(17, GPIO.IN)   #Read output from PIR motion sensor 
GPIO.setup(4, GPIO.OUT)   #LED output pin 
GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_UP) 

def func1(): 
    while True: 
     #first if statement 

def func2(): 
    while True: 
     #Second if Statement 


if __name__ == '__main__': 
    p1 = Process(target=func1) 
    p1.start() 
    p2 = Process(target=func2) 
    p2.start() 
+0

嘿,這看起來不錯。謝謝。我會盡可能地嘗試。 –