Browse Source

添加电池电量检测

master
zhaohe 1 year ago
parent
commit
7a0398e3dc
  1. 17
      README.md
  2. 2
      app/src/ble_cmd_process_service.c
  3. 9
      app/src/board/board.h
  4. 4
      app/src/board/board_battery_state.c
  5. 50
      app/src/one_conduction_main.c
  6. 2
      dynamic_electrocardiograph_ble_server

17
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. 检查各个延时时间是否正确
...

2
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;

9
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 //

4
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();

50
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);
}
}
// 10RTC未被设置过
@ -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));

2
dynamic_electrocardiograph_ble_server

@ -1 +1 @@
Subproject commit 5187df0e60f21ff65c7b65a58dcab844205ec165
Subproject commit 41e7b619f0e767affbc04172dd922819af27fda6
Loading…
Cancel
Save