// 定义所有条件参数 [min, max, mod], 用{0}表示终止
const u16 Energy_range[5][9][3] = {
{ /* vol <=2 /
{18000, 65535, 30}, {12000, 18000, 24}, {8000, 12000, 18},
{4000, 8000, 16}, {2000, 4000, 10}, {1000, 2000, 6},
{500, 1000, 4}, {0}
},
{ / vol <=4 /
{20000, 65535, 30}, {15000, 20000, 24}, {10000, 15000, 18},
{5000, 10000, 16}, {2500, 5000, 10}, {1000, 2500, 6},
{500, 1000, 4}, {0}
},
{ / vol <=8 /
{40000, 65535, 30}, {20000, 30000, 24}, {15000, 20000, 18},
{10000, 15000, 20}, {5000, 10000, 10}, {1000, 5000, 6},
{500, 1000, 4}, {0}
},
{ / vol <=12 /
{45000, 65535, 30}, {38000, 45000, 24}, {30000, 38000, 18},
{22000, 30000, 16}, {17000, 22000, 10}, {12000, 17000, 6},
{5000, 12000, 4}, {0}
},
{ / else */
{55000, 65535, 30}, {50000, 55000, 26}, {45000, 50000, 24},
{40000, 45000, 22}, {35000, 40000, 20}, {30000, 35000, 18},
{25000, 30000, 16}, {20000, 25000, 14}, {15000, 20000, 12}
},
};
u32 led_level[4][4]=
{//亮红灯1-4个
{0x0000ff00,0,0,0},
{0x0000ff00,0x0000ff00,0,0},
{0x0000ff00,0x0000ff00,0x0000ff00,0},
{0x0000ff00,0x0000ff00,0x0000ff00,0x0000ff00},
};
void rgb_deal(void)
{
if(bt_nor_is_connected()&&bt_get_status()==BT_STA_PLAYING)
{
if(sys_cb.energy_timer>=20)
{//100ms采集一次
sys_cb.energy_timer=0;
power = dac_pcm_pow_calc(); // 获取dac的能量输出
if(sys_cb.lea_role_change&&bt_get_status()==BT_STA_PLAYING)
{//音乐分享
power+=17000;
}
//printf("===================>power: %d====vol: %d==========\n",power,sys_cb.vol);
u8 cond_index = 4; // 默认else分支
if (sys_cb.vol <= 2) cond_index = 0;
else if (sys_cb.vol <= 4) cond_index = 1;
else if (sys_cb.vol <= 8) cond_index = 2;
else if (sys_cb.vol <= 12) cond_index = 3;
for (u8 i = 0; i < 9; i++) {
if (Energy_range[cond_index][i][0] == 0) {
power = 0;
break;
}
if (power > Energy_range[cond_index][i][0] &&
power <= Energy_range[cond_index][i][1]) {
power %= Energy_range[cond_index][i][2];
//printf("---------->power: %d %d %d-----111\n",power,sys_cb.vol,cond_index);
break;
}
}
if(!power)
{
for(u8 i=14;i<18;i++)
{
DATA_BUF[i] = light_off;
}
}else
{
//printf("---------->power: %d-----\n",power);
if(power>=1&&power<=5) level=0;
else if(power>=6&&power<=10) level=1;
else if(power>=11&&power<=15) level=2;
else if(power>=16&&power<=65535) level=3;
//printf("---------->level: %d-----\n",level);
for(u8 i=14;i<18;i++)
{
DATA_BUF[i] = led_level[level][i-14];
}
DATA_BUF[18] = Brigh_Green;
}
}
}
},优化以上代码,实现律动灯(流水灯效,不能跳变)