diff --git a/README.md b/README.md index 18fc85a..89b5871 100644 --- a/README.md +++ b/README.md @@ -13,10 +13,11 @@ 开机,蜂鸣器响一声 OK -开机,检查电量 +开机,检查电量 OK -修改电量检测,电量过低时,指示灯闪烁三下后进入低功耗。 +修改电量检测,电量过低时,指示灯闪烁三下后进入低功耗。OK + 开始采集,蜂鸣器响一声,结束采集,蜂鸣器响一声。 diff --git a/app/src/board/board.h b/app/src/board/board.h index c6d7427..353717f 100644 --- a/app/src/board/board.h +++ b/app/src/board/board.h @@ -70,4 +70,6 @@ #define APP_AUTO_SLEEP_TIMEOUT_MS (10 * 1000) #define APP_BYTE_EACH_FRAME 9 -#define APP_SENSOR_NUM 3 \ No newline at end of file +#define APP_SENSOR_NUM 3 + +#define APP_LOW_BATTERY_LIMIT 2 \ No newline at end of file diff --git a/app/src/board/board_battery_state.c b/app/src/board/board_battery_state.c index 2e27006..21cb7b2 100644 --- a/app/src/board/board_battery_state.c +++ b/app/src/board/board_battery_state.c @@ -1,8 +1,14 @@ #include "board_battery_state.h" -void BoardBattery_init() {} -void BoardBattery_load() { +void BoardBattery_init() {} +static bool m_is_load = false; +void BoardBattery_load() { + if (m_is_load) { + return; + } + + m_is_load = true; nrf_drv_saadc_config_t adccfg = NRFX_SAADC_DEFAULT_CONFIG; adccfg.resolution = NRF_SAADC_RESOLUTION_12BIT; // 4096 等于满采样率 ZERROR_CHECK(nrf_drv_saadc_init(&adccfg, NULL)); @@ -11,7 +17,10 @@ void BoardBattery_load() { channel_config.acq_time = NRF_SAADC_ACQTIME_20US; ZERROR_CHECK(nrfx_saadc_channel_init(BATTERY_ADC_CHANNEL, &channel_config)); } -void BoardBattery_unload() { nrf_drv_saadc_uninit(); } +void BoardBattery_unload() { + m_is_load = false; + nrf_drv_saadc_uninit(); +} int16_t BoardBattery_get_adc_val() { int16_t val = znrf_adc_channel_read_val(BATTERY_ADC_CHANNEL); @@ -27,10 +36,17 @@ int16_t BoardBattery_get_battery_level() { float percent = (voltage - minv) / (maxv - minv) * 100 + (float)0.1 /*加0.1是为了避免999.999时显示电量为90*/; int16_t percent_int = (int16_t)percent; - if (percent_int < 10 && percent_int != 0) { - percent_int = 3; - } else { - percent_int = percent_int / 10 * 10; + if (percent_int < 0) { + percent_int = 0; + } else if (percent_int > 100) { + percent_int = 100; } - return percent_int; + + // if (percent_int < 10 && percent_int != 0) { + // percent_int = 3; + // } else { + // percent_int = percent_int / 10 * 10; + // } + return 10; + // return percent_int; } diff --git a/app/src/board/board_light_ctrl.c b/app/src/board/board_light_ctrl.c index 17a437c..d158ef6 100644 --- a/app/src/board/board_light_ctrl.c +++ b/app/src/board/board_light_ctrl.c @@ -64,7 +64,7 @@ void BoardLight_setGreenLightState(bool state) { m_boardlight_greenlightstate = state; #if LIGHT_PWM_DRIVER if (state) { - light_ctrl.seq_values.channel_0 = 95; // 设置占空比,数值最大不超过 top_value + light_ctrl.seq_values.channel_0 = 99; // 设置占空比,数值最大不超过 top_value nrfx_pwm_simple_playback(&light_ctrl.driver, &light_ctrl.seq, 1, NRF_DRV_PWM_FLAG_LOOP); } else { nrfx_pwm_stop(&light_ctrl.driver, true); diff --git a/app/src/device_ctrl_service.c b/app/src/device_ctrl_service.c index 0502eee..fe067bb 100644 --- a/app/src/device_ctrl_service.c +++ b/app/src/device_ctrl_service.c @@ -256,7 +256,6 @@ void DeviceCtrl_stopSample() { * EXTERN * *******************************************************************************/ - void DeviceCtrl_init() { // 蜂鸣器初始化 BoardBeepCtrl_init(); @@ -275,7 +274,20 @@ void DeviceCtrl_init() { // 监听蓝牙事件 zble_module_reglistener(zble_event_listener); - BoardLight_blockFlash(3, 100); + // BoardLight_blockFlash(3, 100); + + BoardBattery_load(); + if (BoardBattery_get_battery_level() < APP_LOW_BATTERY_LIMIT) { + BoardLight_blockFlash(3, 100); + + // 系统进入深度睡眠,进入深度睡眠前,使能唤醒引脚 + BoardButton_enable_sense(); + app_timer_stop_all(); + sd_power_system_off(); + NVIC_SystemReset(); + m_ispoweron = false; + } + // 切换到待机状态 prvf_change_to_ready_state();