From 4b8ed8cc7d7140cde5d7ed5ee68f518581f1bc27 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sun, 11 Feb 2024 00:27:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BF=83=E7=8E=87=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E5=8A=A8=E6=80=81=E6=94=BE=E5=A4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/basic/qrs_time_domain_zh.c | 5 +++-- app/src/basic/qrs_time_domain_zh.h | 3 ++- app/src/display_manager.c | 8 ++++---- app/src/heart_wave_sample_service.c | 26 ++++++++++++++++++++++++-- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/app/src/basic/qrs_time_domain_zh.c b/app/src/basic/qrs_time_domain_zh.c index 01d45e7..b6abf91 100644 --- a/app/src/basic/qrs_time_domain_zh.c +++ b/app/src/basic/qrs_time_domain_zh.c @@ -153,7 +153,6 @@ void QRS_resetBuf() { // HeartRateMeanFilter_reset(); } - void QRS_processData(uint16_t _data) { uint16_t data = pQRS_median_filter(_data); /******************************************************************************* @@ -215,4 +214,6 @@ void QRS_processData(uint16_t _data) { } } } -uint16_t QRS_getHeartRate() { return m_heartrate; } \ No newline at end of file +uint16_t QRS_getHeartRate() { return m_heartrate; } + +uint16_t QRS_getMaxValueLastVal() { return m_max_val_in_m_data; } \ No newline at end of file diff --git a/app/src/basic/qrs_time_domain_zh.h b/app/src/basic/qrs_time_domain_zh.h index 37f6f43..4fea3b0 100644 --- a/app/src/basic/qrs_time_domain_zh.h +++ b/app/src/basic/qrs_time_domain_zh.h @@ -10,8 +10,9 @@ */ #pragma once #include -#define TABLE_SIZE 500 +#define TABLE_SIZE 1000 void QRS_resetBuf(); void QRS_processData(uint16_t data); uint16_t QRS_getHeartRate(); +uint16_t QRS_getMaxValueLastVal(); diff --git a/app/src/display_manager.c b/app/src/display_manager.c index 84acf75..02fdbc3 100644 --- a/app/src/display_manager.c +++ b/app/src/display_manager.c @@ -282,7 +282,7 @@ void dsp_mgr_change_to_sampling(int progress_s, int heartrate) { // sample_page_state_t* sps = &m_sample_page_state; sps->progress_x = SMAPLE_PAGE_START_X + 10; - sps->progress_y = SMAPLE_PAGE_START_Y + 2; + sps->progress_y = SMAPLE_PAGE_START_Y + 3; sps->progress_width = 100; sps->progress_hight = 8; @@ -291,7 +291,7 @@ void dsp_mgr_change_to_sampling(int progress_s, int heartrate) { // sps->wave_drawser_hight = 45; sps->wave_drawser_width = 90; - sps->heartrate_x = sps->wave_drawser_x + sps->wave_drawser_width + 5; + sps->heartrate_x = sps->wave_drawser_x + sps->wave_drawser_width + 2; sps->heartrate_y = sps->wave_drawser_y + 5; int progress = progress_s / SAMPLE_MIN_TIME_S * 25; @@ -360,7 +360,7 @@ void samplePage_schedule() { int wave_y = (int)hwss_read_val(); int heartrate = (int)hwss_read_heart_rate(); // ZLOGI("samplePage_schedule %d %d %d", capturetime, wave_y, heartrate); - samplePage_update_state(capturetime / 1000, wave_y, hwss_read_heart_rate(), count % 30 == 0, count % 5 == 0); + samplePage_update_state(capturetime / 1000, wave_y, hwss_read_heart_rate(), count % 30 == 0, count % 10 == 0); } /******************************************************************************* @@ -435,7 +435,7 @@ void dsp_mgr_init(void) { ZERROR_CHECK(app_timer_create(&m_dsp_mgr_schedule_tmr, APP_TIMER_MODE_REPEATED, dsp_mgr_schedule_tmr_cb)); } // 此处周期决定采样一个页面显示的宽度 - ZERROR_CHECK(app_timer_start(m_dsp_mgr_schedule_tmr, APP_TIMER_TICKS(25), NULL)); + ZERROR_CHECK(app_timer_start(m_dsp_mgr_schedule_tmr, APP_TIMER_TICKS(12), NULL)); timer_inited = true; } void dsp_mgr_uninit(void) { diff --git a/app/src/heart_wave_sample_service.c b/app/src/heart_wave_sample_service.c index 21a95b0..b6f843a 100644 --- a/app/src/heart_wave_sample_service.c +++ b/app/src/heart_wave_sample_service.c @@ -94,16 +94,38 @@ static inline void prvf_light_block_trigger_event() { AppEvent_pushEvent(&event); } +// QRS_getMaxValueLastVal(); + +uint16_t getRecommendedMagnification() { + // return 0; + uint16_t max = QRS_getMaxValueLastVal(); + if (max == 0) { + return 1; + } + // 3750.0f + if (max <= (3750 / 2)) { + return 10; + } + float af = (3750 / 2) / (max - 3750 / 2); + if (af > 10) { + return 10; + } + return af; +} + void nrfx_timer_event_handler(nrf_timer_event_t event_type, void* p_context) { // uint16_t val = BoardEcgSensor_plod_get_ecg_val(); // 12bit /******************************************************************************* * 显示数据计算并赋值 * *******************************************************************************/ + + // QRS_getMaxValueLastVal(); + QRS_processData(val); - float val_af100 = (float)val / 4096.0f * 100; + float val_af100 = (float)val / 3750.0f * 100; // 参考电压为3.6v,但信号范围为3.3v m_frame_index++; - val_af100 = amp_val(val_af100, 45, 3.5f); + val_af100 = amp_val(val_af100, 50, getRecommendedMagnification()); val_af100 = Filter(&m_filter, val_af100); m_sensor_display_data = val_af100;