2015-09-26 229 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 –