From 7a0398e3dc908accc62fef255849e8ab8261c9cc Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sat, 10 Feb 2024 00:10:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=B5=E6=B1=A0=E7=94=B5?= =?UTF-8?q?=E9=87=8F=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 +++++++----- app/src/ble_cmd_process_service.c | 2 +- app/src/board/board.h | 9 +++++-- app/src/board/board_battery_state.c | 4 +-- app/src/one_conduction_main.c | 50 +++++++++++++++++++++++++---------- dynamic_electrocardiograph_ble_server | 2 +- 6 files changed, 57 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 733ca02..0fe9dca 100644 --- a/README.md +++ b/README.md @@ -8,18 +8,21 @@ TODO 3. 添加是否充电检测 OK 1. 添加逻辑,如果未配置时间,设备进入深度休眠。 OK 2. 修改电池电量相关逻辑,校准电池电量。OK -4. 添加连接状态指示灯 +4. 添加连接状态指示灯 OK + +4. 修改屏幕显示位置 OK (不改了) +6. 调整ADC放大倍数 (不修改,显示默认放大1.8倍,中心方法) +5. 充电中,限制用户操作 ,充电时,不测量,但没有任何提示。OK +7. 开机时进行低电量检测 OK +3. 修改心率采样ADC参考电压 OK +8. 记录上传添加校验和 +9. 5分钟蓝牙未发送任何消息,自动断开蓝牙连接 -3. 修改心率采样ADC参考电压 -4. 修改屏幕显示位置 -5. 充电中,限制用户操作 -6. 调整ADC放大倍数 -7. 开机时进行低电量检测 测试: 1. 电池电量测试 2. 充电插入检测 - +3. 检查各个延时时间是否正确 ... diff --git a/app/src/ble_cmd_process_service.c b/app/src/ble_cmd_process_service.c index 0d910df..decf887 100644 --- a/app/src/ble_cmd_process_service.c +++ b/app/src/ble_cmd_process_service.c @@ -302,7 +302,7 @@ void ble_cmder_process_rx(uint8_t* rx, int len) { receipt->drop_state1 = 0x00; receipt->device_state0.sampling_state = (ds_now_state() == kdevice_state_sampling); receipt->device_state0.report_state = m_realtime_report_state; - receipt->device_state0.low_battery = (BoardBattery_get_battery_level() < 20); + receipt->device_state0.low_battery = (BoardBattery_get_battery_level() < APP_LOW_BATTERY_LIMIT); receipt->device_state0.full_storge = (sample_data_mgr_storage_is_full()); receipt->device_state1 = 0; diff --git a/app/src/board/board.h b/app/src/board/board.h index ed0139d..8519527 100644 --- a/app/src/board/board.h +++ b/app/src/board/board.h @@ -28,7 +28,7 @@ #define MAX_FILE_NUM 10 // 最多存储条目数 #define SAMPLE_RATE 500 // 采样率 #define SAMPLE_PRECISION 12 // 采样精度 -#define AUTOMATIC_SLEEP_TIME 5000 // 开机后自动休眠时间 +#define AUTOMATIC_SLEEP_TIME 30000 // 开机后自动休眠时间 #define SAMPLE_MIN_TIME_S (30.0) // 采样最小时间 #define LITTLE_DATA_BLOCK_FRAME_NUM 5 // 每次多少帧上报一次 @@ -39,4 +39,9 @@ #define HEART_WAVE_SAMPLE_TMR_INSTANCE 3 -#define LIGHT_PWM_INSTANCE 1 +#define LIGHT_PWM_INSTANCE 1 + +#define APP_BATTERY_PROTECT_LEVEL 2 // 低于此电量不能开机,保护电池 +#define APP_AUTO_STANDY_BATTERY_LEVEL 10 // 低于此电量自动待机,保持时钟 +#define APP_WORK_BATTERY_LEVEL 13 // Main初始化时候和从standy切换到work的时候,检查这个电量 +#define APP_LOW_BATTERY_WARNING_LIMIT 20 // diff --git a/app/src/board/board_battery_state.c b/app/src/board/board_battery_state.c index 7d4166c..a833235 100644 --- a/app/src/board/board_battery_state.c +++ b/app/src/board/board_battery_state.c @@ -48,8 +48,8 @@ int16_t BoardBattery_get_charging_state() { // return !nrf_gpio_pin_read(BATTERY_CHARGE_DETECT_PIN); } int16_t BoardBattery_get_battery_level() { - static const float maxv = 4.0; - static const float minv = 3.3; + static const float maxv = 4.15; + static const float minv = 3.5; int16_t rawval = BoardBattery_get_adc_val(); diff --git a/app/src/one_conduction_main.c b/app/src/one_conduction_main.c index 481f26f..11e5fb0 100644 --- a/app/src/one_conduction_main.c +++ b/app/src/one_conduction_main.c @@ -86,6 +86,18 @@ static void power_off() { ble_cmder_uninit(); m_poweronflag = false; } +void ENTER_DEEP_SLEEP() { + // 进入深度睡眠前,使能唤醒引脚 + BoardEcgSensor_set_sence_state(); + BoardBattery_sence_gpio_init_before_sleep(); + // nrf_sdh_disable_request(); + app_timer_stop_all(); + nrf_sdh_suspend(); + sd_power_system_off(); + NVIC_SystemReset(); +} + +static void check_battery_level() {} /******************************************************************************* * 状态切换方法 * *******************************************************************************/ @@ -132,17 +144,6 @@ static void state_machine__change_to_home_state() { dsp_mgr_change_to_main(); } -void ENTER_DEEP_SLEEP() { - // 进入深度睡眠前,使能唤醒引脚 - BoardEcgSensor_set_sence_state(); - BoardBattery_sence_gpio_init_before_sleep(); - // nrf_sdh_disable_request(); - app_timer_stop_all(); - nrf_sdh_suspend(); - sd_power_system_off(); - NVIC_SystemReset(); -} - static void app_event_listener(void* p_event_data, uint16_t event_size) { if (!p_event_data) return; app_event_t* p_event = (app_event_t*)p_event_data; @@ -166,7 +167,11 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { // 导联连接事件触发 --> 切换到开机中页面 else if (BoardEcgSensor_plod_get_connected_state()) { - state_machine__change_to_poweroning_state(); + if (BoardBattery_get_battery_level() > APP_WORK_BATTERY_LEVEL) { + state_machine__change_to_poweroning_state(); + } else { + BoardLight_blockFlash(3, 100); + } } // 10秒后,如果RTC未被设置过,则进入超低功耗 @@ -174,6 +179,9 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { if (!znordic_rtc_has_setted()) { ENTER_DEEP_SLEEP(); } + if(APP_BATTERY_PROTECT_LEVEL > BoardBattery_get_battery_level()){ + ENTER_DEEP_SLEEP(); + } } } @@ -211,8 +219,15 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { // 如果用户继续保持静止,切换到采集页面 else if (BoardEcgSensor_plod_get_connected_state_after_filter() && ds_cur_state_haspassed_ms() > 1500) { // dsp_mgr_change_to_preparePage - ds_change_to_state(kdevice_state_keep_still); - dsp_mgr_change_to_preparePage(); + if (!BoardBattery_get_charging_state()) { + ds_change_to_state(kdevice_state_keep_still); + dsp_mgr_change_to_preparePage(); + } + } + + // 低电量,设备直接进入深度睡眠 + else if (BoardBattery_get_battery_level() < APP_AUTO_STANDY_BATTERY_LEVEL) { + state_machine__change_to_standby_state(); } // ZLOGI("bt:%d plod:%d has_disc:%d state:%d", zdatachannel_is_connected(), BoardEcgSensor_plod_get_connected_state_after_filter(), plod_state_has_disconnected_ms(), ds_cur_state_haspassed_ms()); } @@ -382,6 +397,13 @@ void one_conduction_main() { BoardLight_Init(); BoardLight_load(); + BoardBattery_load(); + if (BoardBattery_get_battery_level() < APP_WORK_BATTERY_LEVEL) { + BoardLight_blockFlash(3, 100); + // 系统进入深度睡眠,进入深度睡眠前,使能唤醒引脚 + ENTER_DEEP_SLEEP(); + } + ZERROR_CHECK(app_timer_create(&m_state_machine_driver_tmr, APP_TIMER_MODE_REPEATED, state_machine_driver_tmr_cb)); ZERROR_CHECK(app_timer_start(m_state_machine_driver_tmr, APP_TIMER_TICKS(300), NULL)); diff --git a/dynamic_electrocardiograph_ble_server b/dynamic_electrocardiograph_ble_server index 5187df0..41e7b61 160000 --- a/dynamic_electrocardiograph_ble_server +++ b/dynamic_electrocardiograph_ble_server @@ -1 +1 @@ -Subproject commit 5187df0e60f21ff65c7b65a58dcab844205ec165 +Subproject commit 41e7b619f0e767affbc04172dd922819af27fda6