Raspberry Pi超声波传感器输出在几次While循环迭代后暂停

2024-04-25 22:01:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我用乐高做了一个简单的机器人,它用树莓皮做电脑。我写的代码是用Python编写的,它基本上是用超声波传感器来测量距离。代码如下:

import RPi.GPIO as g
import time as t
g.setmode(g.BCM)
g.setwarnings(False)

# trig is the pin on the sensor which will emit a very fast pulse
trig = 21
# echo is the pin which will recieve the pulse from the trig 
echo = 20

g.setup(trig, g.OUT)
g.setup(echo, g.IN)

def distance(dur):
    global dis
    start = 0
    end = 0
    g.output(trig, False)
    t.sleep(0.01)
    g.output(trig, True)
    t.sleep(0.00001)
    g.output(False)
    while g.input(echo) == 0:
        start = t.time()
    while g.input(echo) == 1:
        start = t.time()
    duration = end - start
    dis = duration * 17150
    dis = round(dis,2)
    print "Distance: " + dis
    t.sleep(dur)

while True:
    # so the function is being called, and the time between outputs is 0.01 seconds so it is very 
    # fast and quickly showing on the screen. If the distance is less than 5, then the program 
    # will print out "Hi" to show that. s
    distance(0.01)
    if dis < 5:
        print "Hi"

很直截了当,对吧?但是你看,代码执行得很完美,它显示了距离,当我把手放在传感器附近,变量dis小于5时,程序会打印出“Hi”。。。在此之前:

Ultrasonic Sensor Distance Output Picture. 您可以看到输出流只是暂停。它真的停了下来,就这样。没有错误消息,没有。最糟糕的是它随机地这么做。当它只是打印出距离时,它可能会暂停,当它打印“Hi”时,它可能会暂停,但我注意到,它在打印“Hi”时停顿得更频繁,并且在随机输出数之后暂停。所以接下来我要做的就是按ctrl+c停止程序,这就是它看起来的样子like. 我还忘了提到三个超声波传感器作为一个连接在一起,只使用gpio21和GPIO 20。它仍然可以工作,即使他们有自己的一对独立的引脚,他们仍然有同样的失速问题,所以这没有什么区别。在

如果有人知道是什么原因造成的,我会很高兴,因为我花了好几个小时来解决它。在


Tags: theechofalse距离outputtimeissleep
1条回答
网友
1楼 · 发布于 2024-04-25 22:01:12

简单回答:在函数后的while循环中添加一个0.01的sleep 问题是Pi的速度比传感器快,导致 没有错误,只是暂停一下。在

就像Tammo Heeren说的,加上睡眠。不过,超声波传感器的速度可能会更快,但速度也会很快。开始的时候差别很小,但随着时间的推移会越来越大。你的程序随机停止可能是因为CPU没有达到速度(也就是说,滞后),只是需要更长的时间退出。在

相关问题 更多 >