0

我正在尝试编写一个程序来显示连接到 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 块,现在我可以无限期地输出。谢谢你的帮助。

4

1 回答 1

1

错误出在代码的 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"
于 2019-12-04T01:43:10.783 回答