我很好奇这些代码是如何工作的。
我一直在看这个部分:
echo.value() == 0:
signaloff = utime.ticks_us ()
echo.value() == 1:
signalon = utime.ticks_us ()
Timepassed = signalon - signaloff
Dist = (timepassed * 0.0343) / 2
我一直在想这到底是怎么回事。对我的大脑来说,这似乎只是测量传入脉冲的长度。如果我错了,有人纠正我,或者让我知道这是怎么回事,但这是我的逻辑-
- 发出脉冲
- 当我们没有检测到一个接收到的脉冲时,保持更新一个数字。例:
- 1001 1002 1003 10041005
- 当我们收到一个脉冲时,更新一个不同的数字。例:
- 1006、1007、1008
- 从第二项减去第一项:
- 1008 - 1005 = 3
- 这只是测量了我们实际检测到的脉冲返回的微秒数,而不是脉冲反弹所花的时间。
我怎么会想错了呢?我是否误解了utime.ticks_us()的作用?这只是从它被调用的时间开始计数,然后当它开始检测到一个高信号时开始再次计数吗?我的想法是,在从触发器发送一个高脉冲之后,立即对utime.ticks_us()进行一次测量。它会找到一些微秒值并将其存储为一个值,然后我们等待,直到我们得到一个高脉冲,在那之前什么都不做。当我们得到一个高脉冲时我们用微秒来标记这个高脉冲的开始,然后我们可以找到初始输出脉冲和返回脉冲的差值,乘以声速,以厘米/秒为单位,然后除以2。
编辑:显然,我知道它是有效的,我只是试图拼凑它是如何工作的。同样,在while循环中定义了signaloff和signalon,但是之后它们会在这些缩进之外再次使用。为什么它允许这样做?