2016-01-06 42 views
0

我已经设置了3个HC-SR04超声波传感器,可以连续运行树莓派。其中两个传感器完美工作,而其中一个非常不稳定。我多次更换电线,传感器和面包板,并更改与传感器相关的触发和回显引脚。我已经调试代码,并隔离在下面的代码中的问题传感器:带有树莓派2b +的超声波传感器造成编译错误

import RPi.GPIO as GPIO 
import time 

TRIG1 = 13 
ECHO1 = 15 

##TRIG2 = 22 
##ECHO2 = 18 
## 
##TRIG3 = 37 
##ECHO3 = 40 

GPIO.setmode(GPIO.BOARD) 
GPIO.setwarnings(False) 

GPIO.setup(TRIG1, GPIO.OUT) 
GPIO.output(TRIG1, 0) 

##GPIO.setup(TRIG2, GPIO.OUT) 
##GPIO.output(TRIG2, 0) 
## 
##GPIO.setup(TRIG3, GPIO.OUT) 
##GPIO.output(TRIG3, 0) 

GPIO.setup(ECHO1, GPIO.IN) 
##GPIO.setup(ECHO2, GPIO.IN) 
##GPIO.setup(ECHO3, GPIO.IN) 

while True: 
     time.sleep(0.1) 

     GPIO.output(TRIG1, 1) 
     time.sleep(0.00001) 
     GPIO.output(TRIG1, 0) 
     print("anything") 
     while GPIO.input(ECHO1) == 0: 
       print("Works") 
       time.sleep(1) 
       start1 = time.time() 

     while GPIO.input(ECHO1) ==1: 
       stop1 = time.time() 
     print("sensor 1:") 
     print (stop1-start1) * 17000 

##  time.sleep(0.1) 
## 
##  GPIO.output(TRIG2, 1) 
##  time.sleep(0.00001) 
##  GPIO.output(TRIG2, 0) 
## 
##  while GPIO.input(ECHO2) == 0: 
##    start2 = time.time() 
## 
##  while GPIO.input(ECHO2) == 1: 
##    stop2 = time.time() 
##  print("sensor 2:") 
##  print (stop2-start2) * 17000 
## 
##  time.sleep(0.1) 
## 
##  GPIO.output(TRIG3, 1) 
##  time.sleep(0.00001) 
##  GPIO.output(TRIG3, 0) 
## 
##  while GPIO.input(ECHO3) == 0: 
##    start3 = time.time() 
## 
##  while GPIO.input(ECHO3) == 1: 
##    stop3 = time.time() 
##  print("sensor 3:") 
##  print (stop3-start3) * 17000 

GPIO.cleanup() 

,上面写着“打印(”东西“)”行允许代码编译,但拿不出距离读数,并会继续打印“作品”,表示它在第一个while循环中连续运行。意外地当“打印(”任何“)”行被删除时,错误:

print (stop1-start1) * 17000 
NameError: name 'start1' is not defined 

打印到终端。上面注释的代码与功能传感器的代码完全相同,但与当前未注释的代码隔离开来的代码没有错误。任何想法或建议将不胜感激。

谢谢。

+0

在while循环外定义stop1和start1 – Gusman

回答

0

我认为你有一个计时问题,这会导致你的代码根据“小”时序变化而以不同的方式运行。

由于未初始化start1,您的代码失败。

当你在你的代码(打印“任何东西”)是一个显著延迟的延迟,while循环将运行并初始化启动1

当你没有延迟,

GPIO.input(ECHO1) 

将不会等于零,while循环将不会运行,并且会出现错误。

我认为你应该初始化你的变量,你应该检查是否有时间要求,你不知道。

同时请注意,在树莓派运行蟒蛇,会不会是一个实时系统,所以请注意实时约束,并精心打造是定时敏感的代码。

+0

非常感谢您的帮助,解决了这个问题。 –