from time import ticks_ms, ticks_diff
from machine import Pin
# variables
interrupt_flag = False
pre_peak = ticks_ms()
curr_peak = ticks_ms()
# Read the voltage from Pin 26
comp_in = Pin(26, Pin.IN, Pin.PULL_DOWN)
# ISR function
def callback(comp_in):
global interrupt_flag, pre_peak, curr_peak
pre_peak = curr_peak
curr_peak = ticks_ms()
interrupt_flag = True
# create external interrupt
comp_in.irq(trigger=Pin.IRQ_RISING, handler=callback)
while True:
try:
if interrupt_flag :
interrupt_flag = False
# print(f"Peak: {curr_peak} with previous: {pre_peak}")
diff = ticks_diff(curr_peak, pre_peak)
if diff > 270 and diff < 1500:
BPM = int(60*diff/1000.0)
print(f"BPM = {BPM}")
except KeyboardInterrupt:
break
print("Finished")