grovepi/Software/Python/grove_earclipheartrate/grove_earclipheartrate.py
2025-03-21 16:04:17 +01:00

87 lines
1.8 KiB
Python

# Code contributed by Alessandro Graps a.graps@joulehub.com
# May 2020
# Many thanks !!!
from datetime import datetime
from datetime import timedelta
import time
import grovepi
# Connect the Grove Ear Clip Sensor to digital port D3
sensorPin = 3
start_time = datetime.now()
counter = 0
temp = [0] * 21
data_effect = True
heart_rate = 0
max_heartpulse_duty = 2000
def millis():
global start_time
dt = datetime.now() - start_time
ms = (dt.days * 24 * 60 * 60 + dt.seconds) * 1000 + dt.microseconds / 1000.0
return ms
def arrayInit():
global temp
global counter
counter = 0
temp = [0] * 21
temp[20] = millis()
def sum():
global heart_rate, temp, data_effect
if data_effect:
heart_rate=1200000/(temp[20]-temp[0]);
def interrupt():
global counter
global temp
global data_effect
temp[counter] = millis()
if counter == 0:
sub = temp[counter]-temp[20]
else:
sub = temp[counter]-temp[counter-1]
if sub > max_heartpulse_duty:
data_effect = False
counter = 0
arrayInit()
if counter == 20 and data_effect:
counter = 0
sum()
elif counter != 20 and data_effect:
counter += 1
else:
counter = 0
data_effect = True
def main():
global heart_rate
print("Please place the sensor correctly")
time.sleep(4)
print("Starting measurement...")
arrayInit()
grovepi.set_pin_interrupt(sensorPin, grovepi.COUNT_CHANGES, grovepi.RISING, 1000)
while True:
value = grovepi.read_interrupt_state(sensorPin)
if value > 0:
interrupt()
time.sleep(0.73)
print("HR: {:2.0f}".format(heart_rate))
if __name__ == '__main__':
main()