from src.variables.service import get_variable, set_variable from gpiozero import Button import datetime 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("impulses", 0, False) set_variable("last_calc_time", datetime.datetime.now(), False) 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) set_variable("actual_rpm", round(actual_rpm, 1), False) print(round(actual_rpm, 1)) def new_event(): set_variable("impulses", int(get_variable("impulses")) + 1, False) def speed_calc(): now = datetime.datetime.now() last_time = get_variable("last_calc_time") set_variable("last_calc_time", datetime.datetime.now(), False) impulses = int(get_variable("impulses")) set_variable("impulses", 0, False) time_delta = (now - last_time).total_seconds() actual_rpm = (impulses/pulses_per_rotation) * (60/time_delta) last_rpm = float(get_variable("actual_rpm_unfiltered")) actual_rpm = (last_rpm + actual_rpm) / 2 set_variable("actual_rpm_unfiltered", rpm, False) set_variable("actual_rpm", round(actual_rpm, 1), False) print(actual_rpm) reader.when_pressed = new_event