В следующем коде используется модульная арифметика для итерации по одному списку, добавления и перезаписи значений и печати усредненной скорости. Отрегулируйте iterations
, чтобы контролировать, сколько проходов будет усреднено.
from gpiozero import Button
from signal import pause
import time
radius = 300
button = Button (21)
iterations = 5
speeds = [0] * iterations
speed_idx = 0
def calculate_speed(radius):
global speeds, speed_idx
t1 = time.time()
speeds[speed_idx] = radius / (t1- t0)
print (sum(speeds) / iterations, 'mm/sek')
speed_idx += 1
speed_idx %= iterations
t0 = time.time()
while True:
button.when_pressed = calculate_speed(radius)
time.sleep(0.2)
t0 = time.time()
Обратите внимание, что для «увеличения» в некотором смысле требуется 5 измерений. Если хотите, вы можете добавить оператор if, чтобы не печатать первые 4 записи.
Кроме того, если вы хотите более плавное измерение скоростей, мне пришло в голову, что вы можете использовать одно значение для хранения суммы скоростей за последние N проходов и каждый раз вычитать среднее (принимая N сумм) и добавьте новую скорость. Для стабилизации потребуется несколько дополнительных проходов, но после этого он должен немного сгладить заявленные скорости.