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);
}
posted @ 2023-12-28 15:13  阡陌奈何  阅读(177)  评论(0)    收藏  举报