带有树莓派2b +的超声波传感器造成编译错误
问题描述:
我已经设置了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
打印到终端。上面注释的代码与功能传感器的代码完全相同,但与当前未注释的代码隔离开来的代码没有错误。任何想法或建议将不胜感激。
谢谢。
答
我认为你有一个计时问题,这会导致你的代码根据“小”时序变化而以不同的方式运行。
由于未初始化start1,您的代码失败。
当你在你的代码(打印“任何东西”)是一个显著延迟的延迟,while循环将运行并初始化启动1
当你没有延迟,
GPIO.input(ECHO1)
将不会等于零,while循环将不会运行,并且会出现错误。
我认为你应该初始化你的变量,你应该检查是否有时间要求,你不知道。
同时请注意,在树莓派运行蟒蛇,会不会是一个实时系统,所以请注意实时约束,并精心打造是定时敏感的代码。
+0
非常感谢您的帮助,解决了这个问题。 –
在while循环外定义stop1和start1 – Gusman