对您的问题的简短回答是您创建一个值列表,然后对这些值进行平均。下面我修改了你的例子来做到这一点。我创建一个名为的空列表all_readings
,然后将每个新读数附加到它。一旦我们有 50 个读数,然后我平均列表中的所有值。
我对您的代码进行了其他一些更改,希望对您有所帮助。
- 将用于从传感器读取值的代码放入函数中,以帮助识别代码的哪些位在做什么
- 由于我没有将传感器连接到我的 micro:bit,因此该
read_distance
功能无法正常工作,因此我创建了一个名为的新功能,fake_distance
以便我可以测试我的average_reading
功能
- 创建了一个调用
average_reading
来进行平均的函数
- 使用了一个
while True
循环,这样读数将永远持续下去
- 创建了一个 for 循环,该循环将在平均值之前读取传感器 50 次
当您使用传感器在 micro:bit 上运行它时,您可以删除该行:
all_readings.append(fake_distance())
#
并从该行上方的行中取消注释(删除)
from microbit import *
from machine import time_pulse_us
from utime import sleep_us
from random import randint
display.show(Image.HAPPY)
trig = pin2
echo = pin1
def fake_distance():
return randint(0, 9)
def read_distance():
trig.write_digital(0)
echo.read_digital()
trig.write_digital(1)
sleep_us(10)
trig.write_digital(0)
time = time_pulse_us(echo, 1)
return (time/2) / 29.1
def average_reading(readings):
return sum(readings) / len(readings)
while True:
all_readings = []
for i in range(50):
# all_readings.append(read_distance())
all_readings.append(fake_distance())
avg = average_reading(all_readings)
display.show(avg)
print(avg)
sleep(20)