代码拉取完成,页面将自动刷新
同步操作将从 vtor3478/vtor_elec_module 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "vtor_led.h"
//#include "vtor_string.h"
#ifdef __VTOR_LED__
void VtorLed_SetMode(VtorLed* led, int8_t mode)
{
led->mode = mode;
// 预设几种模式
int16_t defaultVtorLedParamArray[][3] =
{
0,0,0,
100,100,100,
3000,1500,3000,
200,100,200,
200,100,400,
200,100,600,
500,400,500,
500,400,1000,
500,400,1500,
200,100,3000,
500,200,3000,
1000,900,3000,
24,0,3000,
24,0,1000,
24,0,300,
};
// 配置参数
VtorLed_SetParams(led,
defaultVtorLedParamArray[mode][0],
defaultVtorLedParamArray[mode][1],
defaultVtorLedParamArray[mode][2]);
}
void VtorLed_SetParams(VtorLed* led, int16_t arr, int16_t ccr, int16_t cycleTime)
{
// int8_t str[128];
// VtorString_Clear(str);
// VtorString_AppendString(str, "VtorLed_SetParams(");
// VtorString_AppendInt(str, arr);
// VtorString_AppendString(str, ", ");
// VtorString_AppendInt(str, ccr);
// VtorString_AppendString(str, ", ");
// VtorString_AppendInt(str, cycleTime);
// VtorString_AppendString(str, ")\r\n");
// VtorString_Print(str);
led->pwmCnt = 0;
led->holdCnt = 0;
led->pwmArr = arr;
led->pwmCcr = ccr;
if(led->mode < 12)
{
// 闪烁灯情况下,根据cycleTime计算3000ms内有多少个arr
led->holdCcr = cycleTime;
}
else
{
// 呼吸灯情况下,cycleTime代表总呼吸时长,
// 根据cycleTime计算每一级亮度持续时间
led->holdCcr = cycleTime / ((led->pwmArr - VTOR_LED_CONFIG_BREATH_MAX_BRIGHTNESS_DIFF) * 2 + 1) - 1;
}
}
void VtorLed_Run(VtorLed* led, int8_t tickInc)
{
// 呼吸灯模式
// 更新模拟定时器cnt
led->pwmCnt += tickInc;
led->pwmCnt %= led->pwmArr;
if(led->mode < 12)
{
// 单闪,双闪等模式
// holdCcr 决定单周期内总有效控制时长
// 非常建议holdCcr刚好 小于等于 整数倍pwmArr
led->holdCnt += tickInc;
if(led->holdCnt < led->holdCcr)
{
led->curState = led->pwmCnt < led->pwmCcr;
}
if(led->holdCnt >= VTOR_LED_CONFIG_BLINK_TOTAL_TIME)
{
led->holdCnt = 0;
led->pwmCnt = 0;
}
}
else
{
// 每级亮度维持时间
led->holdCnt += tickInc;
if(led->holdCnt >= led->holdCcr) // ccr当arr用,达到时就清零
{
led->holdCnt = 0;
// 更新pwm期望占空比
led->pwmCcr += led->pwmCcrInc;
if(led->pwmCcr >= led->pwmArr - VTOR_LED_CONFIG_BREATH_MAX_BRIGHTNESS_DIFF)
{
led->pwmCcrInc = -1;
}
else if(led->pwmCcr <= 0)
{
led->pwmCcrInc = 1;
}
}
led->curState = led->pwmCnt < led->pwmCcr;
}
// 亮灯 灭灯
if(led->lastState != led->curState)
{
led->lastState = led->curState;
if(led->setState)
{
led->setState(led->curState);
}
}
}
#endif // __VTOR_LED__
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。