2015-09-26 51 views
0

我已經給了這個代碼一個好去,並得到它的工作到一個點。代碼的第一部分是距離傳感器,似乎工作正常,也是'如果'的聲明,當我得到它來檢查2釐米和30釐米之間的距離似乎也可以正常工作,接通5秒繼電器,但我現在想要做的是讓它接通2個繼電器5秒鐘,而不僅僅是1秒,但不知道如何將第二個繼電器添加到混音中。目前,我已將Pi連接到4個繼電器板。'距離傳感器'和'繼電器'的Python代碼樹莓派

import RPi.GPIO as GPIO    
import time       
GPIO.setmode(GPIO.BCM)     

GPIO.setwarnings(False) 

TRIG = 23         
ECHO = 24         

print "Distance measurement in progress" 

GPIO.setup(TRIG,GPIO.OUT)     
GPIO.setup(ECHO,GPIO.IN)     

while True: 

    GPIO.output(TRIG, False)     
    print "Waitng For Sensor To Settle" 
    time.sleep(2)        

    GPIO.output(TRIG, True)     
    time.sleep(0.00001)      
    GPIO.output(TRIG, False)     

    while GPIO.input(ECHO)==0:    
    pulse_start = time.time()    

    while GPIO.input(ECHO)==1:    
    pulse_end = time.time()     

    pulse_duration = pulse_end - pulse_start 
    distance = pulse_duration * 17150   
    distance = round(distance, 2)    

    if distance > 2 and distance < 400:  
    print "Distance:",distance - 0.5,"cm" 
    else: 
    print "Out Of Range"     

GPIO.setwarnings(False) 

    if distance >2 and < 30: 
pinList = [3] 

for i in pinList: 
    GPIO.setup(i, GPIO.OUT) 
try: 
    GPIO.output(3, GPIO.LOW) 
    print "ON" 
    time.sleep(5) 
    GPIO.output(3, GPIO.HIGH) 
    print "OFF" 

except KeyboardInterrupt: 
    print " Quit" 

    GPIO.cleanup() 
+0

'如果距離> 2 <30:'是不是有效的語法,如果你想鏈的表達是'如果2 <距離<30:' –

回答

0

它看起來就像你一起切了許多不同的來源。其中一個原始腳本簡單地使用列表(pinList)來遍歷 - 這個原始的使用似乎已經在某處丟失了。

下面的代碼應該讓你回到正確的軌道。這可能是值得比較我已經改變和做更多的閱讀。您需要更改第11行以匹配附加繼電器的引腳號。

import RPi.GPIO as GPIO    
import time       

GPIO.setmode(GPIO.BCM)     
GPIO.setwarnings(False) 

TRIG = 23         
ECHO = 24         

# Add your relay output pins here: 
pinList = [3, your_other_relaypin] 

for pin in pinList: 
    GPIO.setup(pin, GPIO.OUT) 

print "Distance measurement in progress" 

GPIO.setup(TRIG,GPIO.OUT)     
GPIO.setup(ECHO,GPIO.IN)   

try: 
    while True: 

     GPIO.output(TRIG, False)     
     print "Waitng For Sensor To Settle" 
     time.sleep(2)        

     GPIO.output(TRIG, True)     
     time.sleep(0.00001)      
     GPIO.output(TRIG, False)     

     while GPIO.input(ECHO)==0:    
      pulse_start = time.time()    

     while GPIO.input(ECHO)==1:    
      pulse_end = time.time()     

     pulse_duration = pulse_end - pulse_start 
     distance = pulse_duration * 17150   
     distance = round(distance, 2)    

     if distance > 2 and distance < 400:  
      print "Distance: {distance}cm".format(distance=(distance - 0.5)) 
     else: 
      print "Out Of Range"     

     if distance >2 and distance < 30: 

      for pin in pinList: 
       print "ON PIN {pin}".format(pin=pin) 
       GPIO.output(pin, GPIO.LOW) 

      time.sleep(5) 

      for pin in pinList: 
       print "OFF PIN {pin}".format(pin=pin) 
       GPIO.output(pin, GPIO.HIGH) 

    except KeyboardInterrupt: 
     print " Quit" 
     GPIO.cleanup() 
+0

阿拉斯泰爾你的生命的救星,謝謝,效果很好。是的,這是兩個獨立腳本的混合,但現在我有你的修復和我的原始代碼,這將給我一個很好的比較,我錯了什麼地方,並明確瞭解這一點。再次感謝。 –

+0

不用擔心。記得upvote並接受我的回答:) –

+0

供參考:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

相關問題