python - 对连接到 Raspberry Pi 的超声波传感器的 Python 代码进行故障排除
问题描述
我正在尝试编写一个程序来显示连接到 Pi 3B+ 的超声波传感器的输出。代码“挂起”,我的意思是输出的显示突然停止并且程序不再响应。有人可以帮我指出我的代码中的错误吗?
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
TRIG = 16
ECHO = 18
GPIO.setup(TRIG,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)
GPIO.output(TRIG, False)
try:
while True:
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+1.15, 2)
if distance<=400 and distance>=5:
print "distance:",distance,"cm"
except KeyboardInterrupt:
GPIO.cleanup()
编辑:解决了这个问题,Try 和 except 块可能是罪魁祸首,我删除了 try 块,现在我可以无限期地输出。谢谢你的帮助。
解决方案
错误出在代码的 Try 和 except 块上,如果板上的接收器没有接收到任何回声输出,则 try 块会失败并进入 except 块,在该块中我清除了连接到 Pi 的所有引脚。这就是代码在一段时间后停止工作的原因,一旦没有检测到 Echo,引脚就会被清除。删除 try 块允许不间断的测距。代码应修改如下:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
TRIG = 16
ECHO = 18
GPIO.setup(TRIG,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)
GPIO.output(TRIG, False)
while True:
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+1.15, 2)
if distance<=400 and distance>=5:
print "distance:",distance,"cm"
推荐阅读
- excel - 数据透视表 VBA 在我之前工作时显示编译错误
- r - 在绘图文本中结合斜体、粗体和对象值循环
- c# - 无法在自定义控件库中使用自定义字体和 FontAwesome 图标
- python - 为什么下面的代码不产生任何输出?
- css - 固定表格单元格以进行水平滚动
- javascript - 怎样才能找到id属性里面的数组出现了多少次?
- javascript - 如何削减2个小数位后的数字(JS)
- azure - 在处理 Azure 队列时,当 dequeueCount 超过时,有没有办法防止消息进入毒队列?
- svg - 在 SVG 中应用目的地输出合成
- html - 解决问题的链接一旦点击就会变成白色(不可见)