from src.variables.service import get_variable, set_variable from gpiozero import Button import datetime, os, json 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", json.dumps([0]), False) if get_variable("rpm_filter_count") == None: set_variable("rpm_filter_count", 8, True) 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 = json.loads(get_variable("rpm_filter")) print(rpm_filter) while len(rpm_filter) > int(get_variable("rpm_filter_count")): rpm_filter.remove(rpm_filter[0]) rpm_filter.append(rpm) set_variable("rpm_filter", json.dumps(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