Browse Source

添加三种灯效

master
zhaohe 1 year ago
parent
commit
3480fee90d
  1. 6
      README.md
  2. 4
      app/src/board/board_beep_ctrl.c
  3. 42
      app/src/board/board_light_ctrl.c
  4. 12
      app/src/board/board_light_ctrl.h
  5. 10
      app/src/device_ctrl_service.c

6
README.md

@ -9,10 +9,11 @@
心率采集改成由IO中断驱动。OK
修正回执包错误码. OK
指示灯修改成PWM驱动 OK
添加三种灯光效果,慢闪,快闪,阻塞块闪3次 OK
开机,蜂鸣器响一声 OK
开机,检查电量 OK
开机,检查电量
修改电量检测,电量过低时,指示灯闪烁三下后进入低功耗。
@ -31,6 +32,9 @@
电量过低上报低电量事件。电量不足%1时,设备自动断开连接,并关机。
设备充电时候,不允许采集。
修改休眠周期为30秒
```

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

42
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);
}
}

12
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);

10
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; }
Loading…
Cancel
Save