from src.variables.service import get_variable, set_variable from gpiozero import Button import datetime, os pulses_per_rotation = 4 reader = Button(4, pull_up=False, bounce_time=0.0005) set_variable("speed_reader_last_impulse_time", datetime.datetime.now(), False) #set_variable("actual_rpm_unfiltered", 0, False) set_variable("rpm_filter", [0], False) def printer(text): if bool(os.getenv("DEBUG")): print(text) def event(): actual = datetime.datetime.now() last = get_variable("speed_reader_last_impulse_time") difference = (actual - last).total_seconds() set_variable("speed_reader_last_impulse_time", actual, False) rpm = (60 / difference) / pulses_per_rotation #actual_rpm = (float(get_variable("actual_rpm_unfiltered")) + rpm) / 2 #set_variable("actual_rpm_unfiltered", rpm, False) rpm_filter = get_variable("rpm_filter") print(rpm_filter) if len(rpm_filter) > 8: rpm_filter.remove(rpm_filter[0]) rpm_filter.append(rpm) set_variable("rpm_filter", rpm_filter, False) average = 0 for i in rpm_filter: average = average + i actual_rpm = average / len(rpm_filter) set_variable("actual_rpm", round(actual_rpm, 1), False) printer("Measured RPM: {}".format(round(actual_rpm, 1))) reader.when_pressed = event