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

#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;
}