You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
196 lines
5.1 KiB
196 lines
5.1 KiB
#include "light.h"
|
|
rgb_message_t rgb_message;
|
|
TIMING_MODE_T timing_mode;
|
|
ERROR_MODE_T error_mode;
|
|
timing_message_t timing_message;
|
|
|
|
/**
|
|
* @brief 设置灯的模式,高低中分别亮不同颜色的灯
|
|
* 高档红色,中档蓝色,低档绿色
|
|
*/
|
|
void light_module_set_rgb_mode(RGB_MODE_T mode) {
|
|
if (mode == RGB_COLOR_RED) {
|
|
port_led_r_set(true);
|
|
port_led_g_set(false);
|
|
port_led_b_set(false);
|
|
rgb_message.turn_off_the_mode_before_rgb = RGB_COLOR_RED;
|
|
} else if (mode == RGB_COLOR_BLUE) {
|
|
port_led_r_set(false);
|
|
port_led_g_set(true);
|
|
port_led_b_set(false);
|
|
rgb_message.turn_off_the_mode_before_rgb = RGB_COLOR_BLUE;
|
|
} else if (mode == RGB_COLOR_GERRN) {
|
|
port_led_r_set(false);
|
|
port_led_g_set(false);
|
|
port_led_b_set(true);
|
|
rgb_message.turn_off_the_mode_before_rgb = RGB_COLOR_GERRN;
|
|
} else if (mode == RGB_CLOSE) {
|
|
//rgb_message.turn_off_the_mode_before_rgb = RGB_CLOSE;
|
|
port_led_r_set(false);
|
|
port_led_g_set(false);
|
|
port_led_b_set(false);
|
|
}
|
|
}
|
|
/**
|
|
* @brief 设置rgb闪烁或者不闪烁
|
|
*
|
|
* @param mode
|
|
*/
|
|
void light_module_set_rgb_flicker_mode(bool state) {
|
|
if (state == false) {
|
|
rgb_message.rgb_flicker_mode = false;
|
|
} else if (state == true) {
|
|
rgb_message.rgb_flicker_mode = true;
|
|
}
|
|
}
|
|
|
|
void process_rgb_flicker_mode() {
|
|
static uint32_t rgb_flicker_ticket = 0;
|
|
static uint8_t rgb_ticket_count = 0;
|
|
if (port_haspassedms(rgb_flicker_ticket) > 1000) {
|
|
rgb_flicker_ticket = get_sys_ticket();
|
|
if (rgb_ticket_count < 3) {
|
|
// turn_off_the_mode_before_rgb保存了关闭之前的RGB亮灯的模式
|
|
light_module_set_rgb_mode(rgb_message.turn_off_the_mode_before_rgb);
|
|
} else {
|
|
light_module_set_rgb_mode(RGB_CLOSE);
|
|
rgb_ticket_count = 0;
|
|
}
|
|
rgb_ticket_count++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief 定时30min 60min 90min 120min分别打开led3 led2 led1 led0灯
|
|
*
|
|
* @param mode
|
|
*/
|
|
void light_module_set_timing_light_mode(TIMING_MODE_T mode) {
|
|
if (mode == OPEN_ONE_LED) {
|
|
port_led0_set(true);
|
|
port_led1_set(false);
|
|
port_led2_set(false);
|
|
port_led3_set(false);
|
|
} else if (mode == OPEN_TWO_LED) {
|
|
port_led0_set(true);
|
|
port_led1_set(true);
|
|
port_led2_set(false);
|
|
port_led3_set(false);
|
|
} else if (mode == OPEN_THREE_LED) {
|
|
port_led0_set(true);
|
|
port_led1_set(true);
|
|
port_led2_set(true);
|
|
port_led3_set(false);
|
|
} else if (mode == OPEN_FOUR_LED) {
|
|
port_led0_set(true);
|
|
port_led1_set(true);
|
|
port_led2_set(true);
|
|
port_led3_set(true);
|
|
} else if (mode == CLOSE_ALL_LED) {
|
|
port_led0_set(false);
|
|
port_led1_set(false);
|
|
port_led2_set(false);
|
|
port_led3_set(false);
|
|
}
|
|
timing_message.now_timing_mode=mode;
|
|
}
|
|
|
|
/**
|
|
* @brief 不同错误状态下灯的闪烁状态
|
|
*
|
|
* @param mode
|
|
*/
|
|
void light_module_set_error_light_mode(uint8_t mode) {
|
|
if (mode == ERROR_MODE0) {
|
|
port_led0_set(false);
|
|
port_led1_set(false);
|
|
port_led2_set(false);
|
|
port_led3_set(false);
|
|
} else if (mode == ERROR_MODE1) {
|
|
port_led0_set(false);
|
|
port_led1_set(false);
|
|
port_led2_set(false);
|
|
port_led3_set(false);
|
|
} else if (mode == ERROR_MODE2) {
|
|
port_led0_set(false);
|
|
port_led1_set(false);
|
|
port_led2_set(false);
|
|
port_led3_set(false);
|
|
} else if (mode == ERROR_MODE3) {
|
|
port_led0_set(false);
|
|
port_led1_set(false);
|
|
port_led2_set(false);
|
|
port_led3_set(false);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief 关闭rgb,关闭led0~led3
|
|
*
|
|
*/
|
|
void light_module_close_all_light(void) {
|
|
light_module_set_rgb_mode(RGB_CLOSE);
|
|
light_module_set_timing_light_mode(CLOSE_ALL_LED);
|
|
light_module_set_rgb_flicker_mode(false);
|
|
}
|
|
|
|
/**
|
|
* @brief 测试按键控制RGB的亮灭
|
|
*
|
|
*/
|
|
void test_set_rgb_mode(void) {
|
|
printf("try_test_set_rgb_mode\r\n");
|
|
static int i = 0;
|
|
if (i == 0) {
|
|
i = 1;
|
|
light_module_set_rgb_mode(RGB_COLOR_RED);
|
|
} else if (i == 1) {
|
|
i = 2;
|
|
light_module_set_rgb_mode(RGB_COLOR_BLUE);
|
|
} else if (i == 2) {
|
|
i = 3;
|
|
light_module_set_rgb_mode(RGB_COLOR_GERRN);
|
|
} else if (i == 3) {
|
|
i = 0;
|
|
light_module_set_rgb_mode(RGB_CLOSE);
|
|
}
|
|
}
|
|
/**
|
|
* @brief 测试按键控制led0~led3的亮灭
|
|
*
|
|
*/
|
|
void test_set_led_mode(void) {
|
|
printf("try_test_set_led_mode\r\n");
|
|
static int j = 0;
|
|
if (j == 0) {
|
|
j = 1;
|
|
light_module_set_timing_light_mode(OPEN_ONE_LED);
|
|
} else if (j == 1) {
|
|
j = 2;
|
|
light_module_set_timing_light_mode(OPEN_TWO_LED);
|
|
} else if (j == 2) {
|
|
j = 3;
|
|
light_module_set_timing_light_mode(OPEN_THREE_LED);
|
|
} else if (j == 3) {
|
|
j = 4;
|
|
light_module_set_timing_light_mode(OPEN_FOUR_LED);
|
|
} else if (j == 4) {
|
|
j = 0;
|
|
light_module_set_timing_light_mode(CLOSE_ALL_LED);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief 测试按键控制rgb闪烁或者不闪烁
|
|
*
|
|
*/
|
|
void test_set_rgb_flicker_mode(void) {
|
|
printf("test_light_module_set_rgb_flicker_mode\r\n");
|
|
static bool m = false;
|
|
if (m == 0) {
|
|
light_module_set_rgb_flicker_mode(true);
|
|
} else if (m == 1) {
|
|
light_module_set_rgb_flicker_mode(false);
|
|
}
|
|
m = !m;
|
|
}
|