diff --git a/examples/UnitUnified/PlotToSerial/main/PlotToSerial.cpp b/examples/UnitUnified/PlotToSerial/main/PlotToSerial.cpp index 8f6350b..f860770 100644 --- a/examples/UnitUnified/PlotToSerial/main/PlotToSerial.cpp +++ b/examples/UnitUnified/PlotToSerial/main/PlotToSerial.cpp @@ -23,13 +23,6 @@ m5::unit::UnitUnified Units; m5::unit::UnitHEART unitHeart; m5::max30100::HeartRate heartRate(100); -uint32_t getSamplingRate(const m5::unit::max30100::Sampling rate) { - static constexpr uint32_t table[] = {50, 100, 167, 200, 400, 600, 800, 1000}; - return table[m5::stl::to_underlying(rate)]; -} - -} // namespace - void setup() { M5.begin(); @@ -40,7 +33,7 @@ void setup() { cfg.pulseWidth = m5::unit::max30100::LedPulseWidth::PW400; cfg.irCurrent = m5::unit::max30100::CurrentControl::mA7_6; cfg.redCurrent = m5::unit::max30100::CurrentControl::mA7_6; - heartRate.setSamplingRate(getSamplingRate(cfg.samplingRate)); + heartRate.setSamplingRate(m5::max30100::HeartRate::getSamplingRate(cfg.samplingRate)); heartRate.setThreshold(25.0f); // depends on ir/redCurrent unitHeart.config(cfg); } @@ -88,8 +81,7 @@ void loop() { Units.update(); if (unitHeart.updated()) { while (unitHeart.available()) { - // M5_LOGI("\n>IR:%u\n>RED:%u", unitHeart.ir(), - // unitHeart.red()); + M5_LOGI("\n>IR:%u\n>RED:%u", unitHeart.ir(), unitHeart.red()); bool beat = heartRate.push_back((float)unitHeart.ir(), (float)unitHeart.red()); if (beat) { M5_LOGI("Beat!"); diff --git a/src/M5UnitUnifiedHEART.hpp b/src/M5UnitUnifiedHEART.hpp index 8611da0..53927ee 100644 --- a/src/M5UnitUnifiedHEART.hpp +++ b/src/M5UnitUnifiedHEART.hpp @@ -14,6 +14,7 @@ #define M5_UNIT_HEART_HPP #include "unit/unit_MAX30100.hpp" +#include "utility/heart_rate.hpp" /*! @namespace m5 diff --git a/src/unit/unit_MAX30100.hpp b/src/unit/unit_MAX30100.hpp index fcb96a7..514ceb5 100644 --- a/src/unit/unit_MAX30100.hpp +++ b/src/unit/unit_MAX30100.hpp @@ -296,11 +296,11 @@ class UnitMAX30100 : public Component, public PeriodicMeasurementAdapter #include #include +#include "../unit/unit_max30100.hpp" namespace m5 { namespace max30100 { @@ -42,12 +43,22 @@ struct butterworthFilter_t { */ class HeartRate { public: + /*! + @brief Conversion m5::unit::max30100::Sampling to sapling rate + @param rate bm5::unit::max30100::Sampling value + @return Sampling rate + */ + static uint32_t getSamplingRate(const m5::unit::max30100::Sampling rate) { + static constexpr uint32_t table[] = {50, 100, 167, 200, 400, 600, 800, 1000}; + return table[m5::stl::to_underlying(rate)]; + } + /*! @param sr Sampling rate (e.g. 167 if max30100::Sampling::Rate167) @param threshold Threshold for detect beat (depends on ir/redCUrrent) @param store_size Stored data size(0U means auto) */ - HeartRate(const uint32_t srate, const float threshold = 125.f, const size_t max_data_size = 0U); + explicit HeartRate(const uint32_t srate = 1, const float threshold = 125.f, const size_t max_data_size = 0U); ///@name Settings ///@{