完善LED模块
This commit is contained in:
parent
775d8ff037
commit
4c9cae72e0
|
@ -14,4 +14,13 @@ void LED_Stop(uint8_t led);
|
||||||
// duty in [0, 255]
|
// duty in [0, 255]
|
||||||
void LED_SetDuty(uint8_t r, uint8_t g, uint8_t b);
|
void LED_SetDuty(uint8_t r, uint8_t g, uint8_t b);
|
||||||
|
|
||||||
|
/// @brief LED闪烁
|
||||||
|
/// @param loop 循环次数
|
||||||
|
/// @param interval 点亮间隔,单位毫秒
|
||||||
|
/// @param time 点亮时间,单位毫秒
|
||||||
|
/// @param r 通道R
|
||||||
|
/// @param g 通道G
|
||||||
|
/// @param b 通道B
|
||||||
|
void LED_StartNTimes(uint8_t loop, uint16_t interval, uint16_t time, uint8_t r, uint8_t g, uint8_t b);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,11 +1,21 @@
|
||||||
#include "led.h"
|
#include "led.h"
|
||||||
#include "tim.h"
|
#include "tim.h"
|
||||||
|
#include "timer.h"
|
||||||
|
|
||||||
#define LED_TIM (&htim3)
|
#define LED_TIM (&htim3)
|
||||||
#define LED_R_CHAN TIM_CHANNEL_4
|
#define LED_R_CHAN TIM_CHANNEL_4
|
||||||
#define LED_G_CHAN TIM_CHANNEL_3
|
#define LED_G_CHAN TIM_CHANNEL_3
|
||||||
#define LED_B_CHAN TIM_CHANNEL_2
|
#define LED_B_CHAN TIM_CHANNEL_2
|
||||||
|
|
||||||
|
#define OFF 0
|
||||||
|
#define ON 1
|
||||||
|
|
||||||
|
static uint8_t state;
|
||||||
|
static uint8_t loop_times;
|
||||||
|
static uint16_t light_time;
|
||||||
|
static uint16_t loop_interval;
|
||||||
|
static uint8_t led_r, led_g, led_b;
|
||||||
|
|
||||||
void LED_Start(uint8_t led)
|
void LED_Start(uint8_t led)
|
||||||
{
|
{
|
||||||
if (led & LED_R)
|
if (led & LED_R)
|
||||||
|
@ -32,3 +42,39 @@ void LED_SetDuty(uint8_t r, uint8_t g, uint8_t b)
|
||||||
__HAL_TIM_SetCompare(LED_TIM, LED_G_CHAN, g);
|
__HAL_TIM_SetCompare(LED_TIM, LED_G_CHAN, g);
|
||||||
__HAL_TIM_SetCompare(LED_TIM, LED_B_CHAN, b);
|
__HAL_TIM_SetCompare(LED_TIM, LED_B_CHAN, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LED_Callback();
|
||||||
|
|
||||||
|
void LED_StartNTimes(uint8_t loop, uint16_t interval, uint16_t time,uint8_t r, uint8_t g, uint8_t b)
|
||||||
|
{
|
||||||
|
loop_times = loop;
|
||||||
|
loop_interval = interval;
|
||||||
|
light_time = time;
|
||||||
|
led_r = r;
|
||||||
|
led_g = g;
|
||||||
|
led_b = b;
|
||||||
|
state = ON;
|
||||||
|
LED_SetDuty(r, g, b);
|
||||||
|
LED_Start(LED_ALL);
|
||||||
|
TIMER_AddLoopEvent(EVENT_LED, LED_Callback, time);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LED_Callback()
|
||||||
|
{
|
||||||
|
switch (state)
|
||||||
|
{
|
||||||
|
case ON:
|
||||||
|
state = OFF;
|
||||||
|
LED_SetDuty(0, 0, 0);
|
||||||
|
if (--loop_times)
|
||||||
|
TIMER_AddLoopEvent(EVENT_LED, LED_Callback, loop_interval);
|
||||||
|
else
|
||||||
|
TIMER_DelLoopEvent(EVENT_LED);
|
||||||
|
break;
|
||||||
|
case OFF:
|
||||||
|
state = ON;
|
||||||
|
LED_SetDuty(led_r, led_g, led_b);
|
||||||
|
TIMER_AddLoopEvent(EVENT_LED, LED_Callback, light_time);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user