繁体   English   中英

Raspberry Pi 超声波传感器输出在多次 while 循环迭代后停顿

[英]Raspberry Pi Ultrasonic Sensor Output Stalls After Several While Loop Iterations

我使用 LEGO 制作了这个简单的机器人,它使用 Raspberry Pi 作为计算机。 我写的代码是用 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”时可能会停顿,但我确实注意到它在打印“Hi”时停顿得更频繁,并且在随机数量的输出后停顿。 所以接下来我要做的是按 ctrl+c 停止程序,这就是它的样子 我还忘了提到三个超声波传感器连接在一起,只使用 GPIO 21 和 GPIO 20。尽管它仍然有效,即使它们有自己单独的一对引脚,它们仍然存在相同的停顿问题,因此它不会使有区别。

如果有人知道导致这种情况的原因,我会很高兴,因为我花了几个小时试图修复它。

简短回答:在函数之后的 while 循环中添加 0.01 的 sleep 问题是 Pi 的运行速度比传感器快,不会导致任何错误,只是超时。

就像 Tammo Heeren 所说的,添加睡眠。 超声波传感器只能以如此快的速度(大约是声速)获取和发送数据,但 Pi 的计算速度甚至可能只是天文数字上的一小部分,但这已经足够了,因为 Pi 和传感器将不同步。 一开始的差别很小,但随着时间的推移会变得越来越大。 您的程序随机停止可能是因为 CPU 没有达到速度(又名滞后)并且退出需要更长的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM