From 3480fee90def1b4216a87059ca44852c77179e42 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Thu, 8 Feb 2024 14:05:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=89=E7=A7=8D=E7=81=AF?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++++- app/src/board/board_beep_ctrl.c | 4 ++-- app/src/board/board_light_ctrl.c | 42 ++++++++++++++++++++++++++++++---------- app/src/board/board_light_ctrl.h | 12 ++++++------ app/src/device_ctrl_service.c | 10 ++++++---- 5 files changed, 51 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 80a3cd0..18fc85a 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,11 @@ 心率采集改成由IO中断驱动。OK 修正回执包错误码. OK 指示灯修改成PWM驱动 OK +添加三种灯光效果,慢闪,快闪,阻塞块闪3次 OK 开机,蜂鸣器响一声 OK -开机,检查电量 OK +开机,检查电量 修改电量检测,电量过低时,指示灯闪烁三下后进入低功耗。 @@ -31,6 +32,9 @@ 电量过低上报低电量事件。电量不足%1时,设备自动断开连接,并关机。 设备充电时候,不允许采集。 +修改休眠周期为30秒 + + ``` diff --git a/app/src/board/board_beep_ctrl.c b/app/src/board/board_beep_ctrl.c index 8729396..ae8a43f 100644 --- a/app/src/board/board_beep_ctrl.c +++ b/app/src/board/board_beep_ctrl.c @@ -1,5 +1,5 @@ #include "board_beep_ctrl.h" -#define BEEP_TIMER_INTERVAL (150) +#define BEEP_TIMER_INTERVAL (200) #if 1 APP_TIMER_DEF(m_beep_tmr); // @@ -84,7 +84,7 @@ void BoardBeepCtrl_unload() { void BoardBeepCtrl_set(uint8_t state) { if (state) { - m_beep_pwm0_seq_values.channel_0 = m_beep_pwm0_config0.top_value / 4; // 设置占空比,数值最大不超过 top_value + m_beep_pwm0_seq_values.channel_0 = m_beep_pwm0_config0.top_value / 2; // 设置占空比,数值最大不超过 top_value nrfx_pwm_simple_playback(&m_beep_pwm0, &m_beep_pwm0_seq, 1, NRF_DRV_PWM_FLAG_LOOP); } else { nrfx_pwm_stop(&m_beep_pwm0, true); diff --git a/app/src/board/board_light_ctrl.c b/app/src/board/board_light_ctrl.c index 326f839..17a437c 100644 --- a/app/src/board/board_light_ctrl.c +++ b/app/src/board/board_light_ctrl.c @@ -3,10 +3,11 @@ #include "board.h" #include "znordic.h" -#define BLINK_CNT 1 -#define BLINK_PERIOD_MS (100) - -#define LIGHT_PWM_DRIVER 1 +#define BLINK_CNT 1 +#define BLINK_PERIOD_MS (100) +#define QUICK_BLINK_PERIOD_MS (100) +#define SLOW_BLINK_PERIOD_MS (3000) +#define LIGHT_PWM_DRIVER 1 // LED_GREEN_PIN @@ -51,12 +52,16 @@ static pwm_light_ctrl_t light_ctrl = { }, }; -static LightEffect m_light_effect; -static bool m_led_green_light_state; -static int m_blink_cnt; +static LightEffect_t m_light_effect; +static bool m_led_green_light_state; +static int m_blink_cnt; APP_TIMER_DEF(m_green_light_effect_tmr); +static bool m_boardlight_greenlightstate = false; + +void BoardLight_toggleGreenLightState() { BoardLight_setGreenLightState(!m_boardlight_greenlightstate); } void BoardLight_setGreenLightState(bool state) { + m_boardlight_greenlightstate = state; #if LIGHT_PWM_DRIVER if (state) { light_ctrl.seq_values.channel_0 = 95; // 设置占空比,数值最大不超过 top_value @@ -92,11 +97,17 @@ static void BoardLight_effect_tmr_handler(void* p_context) { // BoardLight_setGreenLightState(false); } } else { - if (BLINK_PERIOD_MS * m_blink_cnt >= 1000) { + if (BLINK_PERIOD_MS * m_blink_cnt >= SLOW_BLINK_PERIOD_MS) { m_blink_cnt = 0; return; } } + } else if (m_light_effect == kLightEffect_quickFlash) { + if (BLINK_PERIOD_MS * m_blink_cnt >= QUICK_BLINK_PERIOD_MS) { + BoardLight_toggleGreenLightState(); + m_blink_cnt = 0; + return; + } } m_blink_cnt++; } @@ -112,9 +123,8 @@ void BoardLight_Init() { void BoardLight_load() {} void BoardLight_unload() { BoardLight_setGreenLightEffect(kLightEffect_close); } -void BoardLight_toggleGreenLightState() { nrf_gpio_pin_toggle(LED_GREEN_PIN); } -void BoardLight_setGreenLightEffect(LightEffect effect) { +void BoardLight_setGreenLightEffect(LightEffect_t effect) { m_light_effect = effect; switch (effect) { @@ -129,8 +139,20 @@ void BoardLight_setGreenLightEffect(LightEffect effect) { case kLightEffect_slowFlash: app_timer_start(m_green_light_effect_tmr, APP_TIMER_TICKS(BLINK_PERIOD_MS), NULL); break; + case kLightEffect_quickFlash: + app_timer_start(m_green_light_effect_tmr, APP_TIMER_TICKS(BLINK_PERIOD_MS), NULL); + break; default: break; } return; } + +void BoardLight_blockFlash(int times, int periodms) { + for (int i = 0; i < times; i++) { + BoardLight_setGreenLightState(true); + nrf_delay_ms(periodms); + BoardLight_setGreenLightState(false); + nrf_delay_ms(periodms); + } +} diff --git a/app/src/board/board_light_ctrl.h b/app/src/board/board_light_ctrl.h index e5016a5..69ce60e 100644 --- a/app/src/board/board_light_ctrl.h +++ b/app/src/board/board_light_ctrl.h @@ -6,18 +6,18 @@ #include "board/board.h" typedef enum { - kLightEffect_close, kLightEffect_open, kLightEffect_slowFlash, - -} LightEffect; + kLightEffect_quickFlash, +} LightEffect_t; void BoardLight_Init(); // main中初始化一遍 void BoardLight_load(); void BoardLight_unload(); -void BoardLight_setGreenLightState(bool state); // 尽量不要直接使用该函数 -void BoardLight_toggleGreenLightState(); // 尽量不要直接使用该函数 +void BoardLight_setGreenLightState(bool state); // 尽量不要直接使用该函数 +void BoardLight_toggleGreenLightState(); // 尽量不要直接使用该函数 -void BoardLight_setGreenLightEffect(LightEffect effect); +void BoardLight_setGreenLightEffect(LightEffect_t effect); +void BoardLight_blockFlash(int times, int periodms); diff --git a/app/src/device_ctrl_service.c b/app/src/device_ctrl_service.c index fd5d189..0502eee 100644 --- a/app/src/device_ctrl_service.c +++ b/app/src/device_ctrl_service.c @@ -90,7 +90,7 @@ static void poweron() { SampleDataMgr_loadDriver(); DeviceCtrl_change_to_state(kdevice_state_ready); zble_module_start_adv(); - BoardLight_setGreenLightEffect(kLightEffect_slowFlash); + BoardLight_setGreenLightEffect(kLightEffect_quickFlash); m_ispoweron = true; } @@ -150,10 +150,10 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { // * 状态无关事件处理 * *******************************************************************************/ if (event->eventType == kevent_ble_connect_event) { - BoardLight_setGreenLightEffect(kLightEffect_open); + BoardLight_setGreenLightEffect(kLightEffect_slowFlash); return; } else if (event->eventType == kevent_ble_disconnect_event) { - BoardLight_setGreenLightEffect(kLightEffect_slowFlash); + BoardLight_setGreenLightEffect(kLightEffect_quickFlash); return; } @@ -256,6 +256,7 @@ void DeviceCtrl_stopSample() { * EXTERN * *******************************************************************************/ + void DeviceCtrl_init() { // 蜂鸣器初始化 BoardBeepCtrl_init(); @@ -273,6 +274,8 @@ void DeviceCtrl_init() { AppEvent_regListener(app_event_listener); // 监听蓝牙事件 zble_module_reglistener(zble_event_listener); + + BoardLight_blockFlash(3, 100); // 切换到待机状态 prvf_change_to_ready_state(); @@ -290,4 +293,3 @@ void DeviceCtrl_change_to_state(device_state_t state) { } uint32_t DeviceCtrl_cur_state_haspassed_ms() { return znordic_haspassed_ms(m_change_to_cur_state_tp); } device_state_t DeviceCtrl_now_state() { return m_device_state; } -