HAND
Diff: MAX30100_PulseOximeter.h
- Revision:
- 0:010b908e2187
diff -r 000000000000 -r 010b908e2187 MAX30100_PulseOximeter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MAX30100_PulseOximeter.h Fri Nov 25 00:52:54 2016 +0000 @@ -0,0 +1,83 @@ +/* +Arduino-MAX30100 oximetry / heart rate integrated sensor library +Copyright (C) 2016 OXullo Intersecans <x@brainrapers.org> +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef MAX30100_PULSEOXIMETER_H +#define MAX30100_PULSEOXIMETER_H + +#define SAMPLING_FREQUENCY 100 +#define CURRENT_ADJUSTMENT_PERIOD_MS 500 +#define IR_LED_CURRENT MAX30100_LED_CURR_50MA +#define RED_LED_CURRENT_START MAX30100_LED_CURR_27_1MA +#define DC_REMOVER_ALPHA 0.95 + +#include <stdint.h> +#include <vector> + + +#include "MAX30100.h" +#include "MAX30100_BeatDetector.h" +#include "MAX30100_Filters.h" +#include "MAX30100_SpO2Calculator.h" + +typedef enum PulseOximeterState { + PULSEOXIMETER_STATE_INIT, + PULSEOXIMETER_STATE_IDLE, + PULSEOXIMETER_STATE_DETECTING +} PulseOximeterState; + +typedef enum PulseOximeterDebuggingMode { + PULSEOXIMETER_DEBUGGINGMODE_NONE, + PULSEOXIMETER_DEBUGGINGMODE_RAW_VALUES, + PULSEOXIMETER_DEBUGGINGMODE_AC_VALUES, + PULSEOXIMETER_DEBUGGINGMODE_PULSEDETECT +} PulseOximeterDebuggingMode; + + +class PulseOximeter { +public: + PulseOximeter(); + + bool begin(PulseOximeterDebuggingMode debuggingMode_=PULSEOXIMETER_DEBUGGINGMODE_NONE); + void update(); + float getHeartRate(); + uint8_t getSpO2(); + uint8_t getRedLedCurrentBias(); + void setOnBeatDetectedCallback(void (*cb)()); + +private: + void checkSample(); + void checkCurrentBias(); + + PulseOximeterState state; + PulseOximeterDebuggingMode debuggingMode; +// uint32_t tsFirstBeatDetected; +// uint32_t tsLastBeatDetected; +// uint32_t tsLastSample; +// uint32_t tsLastBiasCheck; +// uint32_t tsLastCurrentAdjustment; + BeatDetector beatDetector; + DCRemover irDCRemover; + DCRemover redDCRemover; + FilterBuLp1 lpf; + uint8_t redLedPower; + SpO2Calculator spO2calculator; + + MAX30100 hrm; + + void (*onBeatDetected)(); + Timer t_Sample; + Timer t_CurrentBias; +}; +#endif \ No newline at end of file