RGB灯效控制
1. 呼吸灯
uint8_t breath_data=10, breath_spd = 0;
void breath_led_single_mode(void)
{
breath_spd++;
if ((breath_spd & 0x7f) < 0x01) //呼吸速率控制
{
return;
}
else
{
breath_spd &= 0x80;
if((breath_spd & 0x80) == 0) //liang
{
breath_data++;
if(breath_data == RGB_MAX)
{
breath_spd |= 0x80;
}
}
else //not liang
{
breath_data--;
if(breath_data == 0)
breath_spd &= ~0x80;
}
}
pwm_duty_set(0, 5, 0, breath_data, 0);
}
2. 渐变灯效
unsigned char g_red=0,g_gree=0,g_bule=0;
unsigned char gradual_mode_step = 0;
unsigned int gradual_mode_spd = 0;
unsigned char gradual_red[15] = {0, 80, 80, 0, 0, 0, 128, 128};
unsigned char gradual_gree[15] = {0, 0, 16, 16, 128, 120, 128, 49};
unsigned char gradual_bule[15] = {128, 128,128, 128,128, 0, 0, 0};
void gradual_mode2(void)
{
unsigned char i=0;
gradual_mode_spd++;
if(gradual_mode_spd < 4) return; //渐变速率
gradual_mode_spd = 0;
if (gradual_red[gradual_mode_step] > g_red) g_red++;
else if(gradual_red[gradual_mode_step] < g_red) g_red--;
else if (gradual_gree[gradual_mode_step] > g_gree) g_gree++;
else if(gradual_gree[gradual_mode_step] < g_gree) g_gree--;
else if (gradual_bule[gradual_mode_step] > g_bule) g_bule++;
else if(gradual_bule[gradual_mode_step] < g_bule) g_bule--;
if ((gradual_red[gradual_mode_step] == g_red) && (gradual_bule[gradual_mode_step] == g_bule) && (gradual_gree[gradual_mode_step] == g_gree))
{
gradual_mode_step++;
if (gradual_mode_step == 8)
gradual_mode_step = 0;
}
pwm_duty_set(0, 5, g_red, g_gree, g_bule);
}