聚丰项目 > 模拟五线谱灯带
技术要点: 1,利用AB32VG1集成的蓝牙模块,连接手机,在线获取mp3音乐数据; 2,利用开发板上功放模块,进行音乐播放; 3,将MP3数据转换位五线谱内音标数据,控制ws2812灯带同步显示五线谱音标位置; 最终应用:帮助音乐初学者播放音乐同时,跟着五线谱学习各类乐器;
abcdelf
分享abcdelf
团队成员
陈 软件工程师
RGB灯带:ws2812
开发板:中科蓝讯AB32VG1
uint8_t music_map2[]={0,100, 103,105,108,108,105, 3,103,105,3,99 ,3,103,105,3,99, 3,3,3,100,103,
5,5,3,99,0,103,100,3,100,103, 1,101,103,1,99,100,103,101,100,3,0,3,105,108,3,99};
uint8_t music_map[]={140,120, 110,130,161,103, 143,120,130,100,130,120 ,110,120,140,120,110,130 ,161,103,103,100,
143,120,130,100,130,120,110,120, 143,120,130,120,130,120,110,130, 161,120,100,130,130,120,110,130,
140,120,122,110,130,120,110,122, 20,120,122,120,110,130,103, 140,122,120,110,122,130,122,110};
void RGBLampContr(uint8_t s);
uint32_t GRB[33]={0};
int main(void)
{
uint8_t Count=0;
Delay_Init();
WS2812_Init();
wsData_Lo;
delay_ms(500);
while(1)
{
RGBLampContr(music_map[Count]);
Count++;
if(Count>sizeof(music_map))Count=0;
}
while(1)
{
RGBLampContr(Count);
delay_ms(300);
Count++;
if(Count>16)Count=0;
}
}
void RGBLampContr2(uint8_t s)
{
// switch (s)
// {
// case 0:
// GRB[0]=0;
// GRB[1]=0;
// GRB[2]=0;
// GRB[3]=0;
// break;
// case 1:
// GRB[0]=0xAA0000; //AA¿É±ä £¬FF¶ÔÓ¦ÑÕÉ«ÁÁ¶È×î´ó
// GRB[1]=0xAA0000;
// GRB[2]=0xAA0000;
// GRB[3]=0xAA0000;
// break;
// case 2:
// GRB[0]=0xAA00;
// GRB[1]=0xAA00;
// GRB[2]=0xAA00;
// GRB[3]=0xAA00;
// break;
// case 3:
// GRB[0]=0xAA;
// GRB[1]=0xAA;
// GRB[2]=0xAA;
// GRB[3]=0xAA;
// break;
// case 4:
// GRB[0]=0x00AAAA;
// GRB[1]=0x00AAAA;
// GRB[2]=0x00AAAA;
// GRB[3]=0x00AAAA;
// break;
// default:break;
// }
// liu shui deng
GRB[(s+15)%16]=0;
GRB[s]=0x00AAAA;
WS2812_SendData(GRB,16);
wsData_Lo;
}
#define PING_TOTAL 8
#define EACH_XIAN_TOTAL (PING_TOTAL+2)
void RGBLampContr(uint8_t s)
{
// xi xian pu
uint16_t speed=6000/(7*((s/100) +1)); //70hz
uint8_t xian_num=(s%100)/10;
uint8_t ping_num=(s%10);
uint8_t led_num=0;
uint32_t led_color= 0x00AAAA;
if(xian_num<4)
{
led_num=(xian_num*EACH_XIAN_TOTAL )+ping_num;
GRB[led_num]=led_color;
WS2812_SendData(GRB,32);
wsData_Lo;
delay_ms(speed);
GRB[led_num]=0;
}
if(xian_num==4) //3zhi
{
led_num=(xian_num*EACH_XIAN_TOTAL )+ping_num;
GRB[led_num]=led_color;
WS2812_SendData(GRB,32);
wsData_Lo;
delay_ms(speed);
GRB[led_num]=0;
}
if(xian_num>4&&xian_num<9) //4zhi
{
led_num=(xian_num*EACH_XIAN_TOTAL )+ping_num;
GRB[led_num]=led_color;
WS2812_SendData(GRB,32);
wsData_Lo;
delay_ms(speed);
GRB[led_num]=0;
}
if(xian_num==9)
{
led_num=6;
GRB[led_num]=0xAA;
GRB[led_num+EACH_XIAN_TOTAL]=0xAA;
GRB[led_num+EACH_XIAN_TOTAL]=0xAA;
GRB[led_num+EACH_XIAN_TOTAL]=0xAA;
WS2812_SendData(GRB,32);
wsData_Lo;
delay_ms(speed);
GRB[led_num]=0;
GRB[led_num+EACH_XIAN_TOTAL]=0;
GRB[led_num+EACH_XIAN_TOTAL]=0;
GRB[led_num+EACH_XIAN_TOTAL]=0;
}
}
灯带部分实现了控制