Veröffentlicht: 21.05.2019 Copyright by Joy-IT 8
3SEN-KY039HS
3.2 Program example
////////////////////////////////////////////////////////////////////////
/// Copyright (c)2015 Dan Truong
/// Permission is granted to use this software under the MIT
/// licence, with my name and copyright kept in source code
/// http://http://opensource.org/licenses/MIT
///
/// KY039 Arduino Heartrate Monitor V1.0 (April 02, 2015)
////////////////////////////////////////////////////////////////////////
// German Comments by Joy-IT
int rawValue;
bool heartbeatDetected(int IRSensorPin, int delay)
{
static int maxValue = 0;
static bool isPeak = false;
bool result = false;
rawValue = analogRead(IRSensorPin);
// Hier wird der aktuelle Spannungswert am Fototransistor ausgelesen und in der rawValue-
Variable zwischengespeichert
rawValue *= (1000/delay);
// Sollte der aktuelle Wert vom letzten maximalen Wert zu weit abweichen
// (z.B. da der Finger neu aufgesetzt oder weggenommen wurde)
// So wird der MaxValue resetiert, um eine neue Basis zu erhalten.
if (rawValue * 4L < maxValue) { maxValue = rawValue * 0.8; } // Detect new peak
if (rawValue > maxValue - (1000/delay)) {
// Hier wird der eigentliche Peak detektiert. Sollte ein neuer RawValue groeßer sein
// als der letzte maximale Wert, so wird das als Spitze der aufgezeichnten Daten er-
kannt.
if (rawValue > maxValue) {
maxValue = rawValue;
}
// Zum erkannten Peak soll nur ein Herzschlag zugewiesen werden
if (isPeak == false) {
result = true;
}
isPeak = true;
} else if (rawValue < maxValue - (3000/delay)) {
isPeak = false;
// Hierbei wird der maximale Wert bei jeden Durchlauf
// etwas wieder herabgesetzt. Dies hat den Grund, dass
// nicht nur der Wert sonst immer stabil bei jedem Schlag
// gleich oder kleiner werden wuerde, sondern auch,
// falls der Finger sich minimal bewegen sollte und somit
// das Signal generell schwaecher werden wuerde.
maxValue-=(1000/delay);
}
return result;
}