增加了部分led的支持

This commit is contained in:
NeoZng
2023-02-14 11:05:41 +08:00
parent 8fa03012cf
commit b0fcab53ad
7 changed files with 81 additions and 2 deletions

44
modules/led/led.c Normal file
View File

@@ -0,0 +1,44 @@
#include "led.h"
#include "stdlib.h"
#include "string.h"
#include "user_lib.h"
static uint8_t idx;
static LEDInstance* bsp_led_ins[LED_MAX_NUM] = {NULL};
LEDInstance *LEDRegister(LED_Init_Config_s *led_config)
{
LEDInstance *led_ins = (LEDInstance *)zero_malloc(sizeof(LEDInstance));
// 剩下的值暂时都被置零
led_ins->led_pwm=GPIORegister(&led_config->pwm_config);
led_ins->led_switch=led_config->init_swtich;
bsp_led_ins[idx++] = led_ins;
return led_ins;
}
void LEDSet(LEDInstance *_led,uint8_t alpha,uint8_t color_value,uint8_t brightness)
{
}
void LEDSwitch(LEDInstance *_led,uint8_t led_switch)
{
if(led_switch==1)
{
_led->led_switch=1;
}
else
{
_led->led_switch=0;
// PWMSetPeriod(_led,0);
}
}
void LEDShow()
{
}

33
modules/led/led.h Normal file
View File

@@ -0,0 +1,33 @@
#ifndef _LED_H_
#define _LED_H_
#include "stdint.h"
#include "bsp_pwm.h"
#define LED_MAX_NUM 3
typedef struct
{
PWMInstance* led_pwm;
uint8_t led_alpha; // 透明度,通过pwm频率改变
uint8_t led_brightness; // 亮度,通过电压改变(如果可以,使用dac)
uint8_t led_color; // rgb value,0-255
uint8_t led_switch // 开关,on1 off0
// void (*action_callback)(void); // led动作回调函数
} LEDInstance;
typedef struct
{
PWM_Init_Config_s pwm_config;
uint8_t init_swtich; // 初始化开关
} LED_Init_Config_s;
LEDInstance* LEDRegister(LED_Init_Config_s* led_config);
void LEDSet(LEDInstance *_led,uint8_t alpha,uint8_t color_value,uint8_t brightness);
void LEDSwitch(LEDInstance *_led,uint8_t led_switch);
void LEDShow();
#endif // !_LED_H_

View File

@@ -1,8 +0,0 @@
# led_task
<p align='right'>neozng1@hnu.edu.cn</p>
> TODO:
> 1. 预计添加不同错误标志,将错误类型和灯的闪烁频率或颜色等对应起来,方便调试
这是legacy support,后续将使用bsp_pwm进行重构

View File

@@ -1,59 +0,0 @@
/**
* @file led_task.c
* @author DJI RM
* @author modified by NeoZeng neozng1@hnu.edu.cn
* @brief 流水灯效
* @version 0.1
* @date 2022-11-30
*
* @copyright Copyright (c) 2022
*
*/
#include "led_task.h"
#include <stdint.h>
#include "bsp_led.h"
#include "main.h"
#define RGB_FLOW_COLOR_CHANGE_TIME 1000
#define RGB_FLOW_COLOR_LENGHT 6
// 蓝 -> 绿(灭) -> 红 -> 蓝(灭) -> 绿 -> 红(灭) -> 蓝
uint32_t RGB_flow_color[RGB_FLOW_COLOR_LENGHT + 1] = {0xFF0000FF, 0x0000FF00, 0xFFFF0000, 0x000000FF, 0xFF00FF00, 0x00FF0000, 0xFF0000FF};
void led_RGB_flow_task()
{
static float delta_alpha, delta_red, delta_green, delta_blue;
static float alpha, red, green, blue;
static uint32_t aRGB;
for (size_t i = 0; i < RGB_FLOW_COLOR_LENGHT; ++i)
{
alpha = (RGB_flow_color[i] & 0xFF000000) >> 24;
red = ((RGB_flow_color[i] & 0x00FF0000) >> 16);
green = ((RGB_flow_color[i] & 0x0000FF00) >> 8);
blue = ((RGB_flow_color[i] & 0x000000FF) >> 0);
delta_alpha = (float)((RGB_flow_color[i + 1] & 0xFF000000) >> 24) - (float)((RGB_flow_color[i] & 0xFF000000) >> 24);
delta_red = (float)((RGB_flow_color[i + 1] & 0x00FF0000) >> 16) - (float)((RGB_flow_color[i] & 0x00FF0000) >> 16);
delta_green = (float)((RGB_flow_color[i + 1] & 0x0000FF00) >> 8) - (float)((RGB_flow_color[i] & 0x0000FF00) >> 8);
delta_blue = (float)((RGB_flow_color[i + 1] & 0x000000FF) >> 0) - (float)((RGB_flow_color[i] & 0x000000FF) >> 0);
delta_alpha /= RGB_FLOW_COLOR_CHANGE_TIME;
delta_red /= RGB_FLOW_COLOR_CHANGE_TIME;
delta_green /= RGB_FLOW_COLOR_CHANGE_TIME;
delta_blue /= RGB_FLOW_COLOR_CHANGE_TIME;
for (size_t j = 0; j < RGB_FLOW_COLOR_CHANGE_TIME; ++j)
{
alpha += delta_alpha;
red += delta_red;
green += delta_green;
blue += delta_blue;
aRGB = ((uint32_t)(alpha)) << 24 | ((uint32_t)(red)) << 16 | ((uint32_t)(green)) << 8 | ((uint32_t)(blue)) << 0;
FlowRGBShow(aRGB);
}
}
}

View File

@@ -1,7 +0,0 @@
#ifndef LED_TRIGGER_TASK_H
#define LED_TRIGGER_TASK_H
void led_RGB_flow_task();
#endif