Browse Source

修改电量检测,电量过低时,指示灯闪烁三下后进入低功耗

master
zhaohe 1 year ago
parent
commit
0fee5671fb
  1. 5
      README.md
  2. 2
      app/src/board/board.h
  3. 28
      app/src/board/board_battery_state.c
  4. 2
      app/src/board/board_light_ctrl.c
  5. 14
      app/src/device_ctrl_service.c

5
README.md

@ -13,10 +13,11 @@
开机,蜂鸣器响一声 OK 开机,蜂鸣器响一声 OK
开机,检查电量
开机,检查电量 OK
修改电量检测,电量过低时,指示灯闪烁三下后进入低功耗。
修改电量检测,电量过低时,指示灯闪烁三下后进入低功耗。OK
开始采集,蜂鸣器响一声,结束采集,蜂鸣器响一声。 开始采集,蜂鸣器响一声,结束采集,蜂鸣器响一声。

2
app/src/board/board.h

@ -71,3 +71,5 @@
#define APP_AUTO_SLEEP_TIMEOUT_MS (10 * 1000) #define APP_AUTO_SLEEP_TIMEOUT_MS (10 * 1000)
#define APP_BYTE_EACH_FRAME 9 #define APP_BYTE_EACH_FRAME 9
#define APP_SENSOR_NUM 3 #define APP_SENSOR_NUM 3
#define APP_LOW_BATTERY_LIMIT 2

28
app/src/board/board_battery_state.c

@ -2,7 +2,13 @@
#include "board_battery_state.h" #include "board_battery_state.h"
void BoardBattery_init() {} void BoardBattery_init() {}
static bool m_is_load = false;
void BoardBattery_load() { void BoardBattery_load() {
if (m_is_load) {
return;
}
m_is_load = true;
nrf_drv_saadc_config_t adccfg = NRFX_SAADC_DEFAULT_CONFIG; nrf_drv_saadc_config_t adccfg = NRFX_SAADC_DEFAULT_CONFIG;
adccfg.resolution = NRF_SAADC_RESOLUTION_12BIT; // 4096 adccfg.resolution = NRF_SAADC_RESOLUTION_12BIT; // 4096
ZERROR_CHECK(nrf_drv_saadc_init(&adccfg, NULL)); ZERROR_CHECK(nrf_drv_saadc_init(&adccfg, NULL));
@ -11,7 +17,10 @@ void BoardBattery_load() {
channel_config.acq_time = NRF_SAADC_ACQTIME_20US; channel_config.acq_time = NRF_SAADC_ACQTIME_20US;
ZERROR_CHECK(nrfx_saadc_channel_init(BATTERY_ADC_CHANNEL, &channel_config)); 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 BoardBattery_get_adc_val() {
int16_t val = znrf_adc_channel_read_val(BATTERY_ADC_CHANNEL); 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*/; float percent = (voltage - minv) / (maxv - minv) * 100 + (float)0.1 /*加0.1是为了避免999.999时显示电量为90*/;
int16_t percent_int = (int16_t)percent; 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;
} }

2
app/src/board/board_light_ctrl.c

@ -64,7 +64,7 @@ void BoardLight_setGreenLightState(bool state) {
m_boardlight_greenlightstate = state; m_boardlight_greenlightstate = state;
#if LIGHT_PWM_DRIVER #if LIGHT_PWM_DRIVER
if (state) { 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); nrfx_pwm_simple_playback(&light_ctrl.driver, &light_ctrl.seq, 1, NRF_DRV_PWM_FLAG_LOOP);
} else { } else {
nrfx_pwm_stop(&light_ctrl.driver, true); nrfx_pwm_stop(&light_ctrl.driver, true);

14
app/src/device_ctrl_service.c

@ -256,7 +256,6 @@ void DeviceCtrl_stopSample() {
* EXTERN * * EXTERN *
*******************************************************************************/ *******************************************************************************/
void DeviceCtrl_init() { void DeviceCtrl_init() {
// //
BoardBeepCtrl_init(); BoardBeepCtrl_init();
@ -275,7 +274,20 @@ void DeviceCtrl_init() {
// //
zble_module_reglistener(zble_event_listener); zble_module_reglistener(zble_event_listener);
// BoardLight_blockFlash(3, 100);
BoardBattery_load();
if (BoardBattery_get_battery_level() < APP_LOW_BATTERY_LIMIT) {
BoardLight_blockFlash(3, 100); 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(); prvf_change_to_ready_state();

Loading…
Cancel
Save