OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6849|回复: 2

关于蓝牙控制音乐播放器实验

[复制链接]

8

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2015-9-19
在线时间
1 小时
发表于 2015-10-25 00:14:05 | 显示全部楼层 |阅读模式
5金钱
您好,原子哥,我这几天想做一个项目,中间用到了蓝牙模块和音乐播放模块,我希望用蓝牙模块控制音乐的开始/停止,上一曲和下一曲,于是开始做项目移植,但是移植过程中遇到了一个问题。
主程序如下:
int main(void)
{        
u8 t;
u8 key;
u8 sendmask=0;
u8 sendcnt=0;
u8 sendbuf[20];  


NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168);  //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
LED_Init(); //初始化LED 
usmart_dev.init(84); //初始化USMART
  LCD_Init(); //LCD初始化  
  KEY_Init(); //按键初始化  
W25QXX_Init(); //初始化W25Q128
WM8978_Init(); //初始化WM8978
WM8978_HPvol_Set(40,40); //耳机音量设置
WM8978_SPKvol_Set(63); //喇叭音量设置

my_mem_init(SRAMIN); //初始化内部内存池 
my_mem_init(SRAMCCM); //初始化CCM内存池 
exfuns_init(); //为fatfs相关变量申请内存  
  f_mount(fs[0],"0:",1); //挂载SD卡  
POINT_COLOR=RED;      
while(font_init()) //检查字库
{    
LCD_ShowString(30,50,200,16,16,"Font Error!");
delay_ms(200);  
LCD_Fill(30,50,240,66,WHITE);//清除显示     
delay_ms(200);  
}    
POINT_COLOR=RED;      
  Show_Str(60,50,200,16,"Explorer STM32F4开发板",16,0);      
Show_Str(60,70,200,16,"音乐播放器实验",16,0);      
Show_Str(60,90,200,16,"正点原子@ALIENTEK",16,0);      
Show_Str(60,110,200,16,"2014年5月24日",16,0);
Show_Str(60,130,200,16,"KEY0:NEXT   KEY2REV",16,0); 
Show_Str(60,150,200,16,"KEY_UPAUSE/PLAY",16,0);

  while(HC05_Init()) //初始化ATK-HC05模块  
{
LCD_ShowString(30,90,200,16,16,"ATK-HC05 Error!"); 
delay_ms(500);
LCD_ShowString(30,90,200,16,16,"Please Check!!!"); 
delay_ms(100);
}
delay_ms(100);
USART3_RX_STA=0;

while(1)

audio_play();


}
因为音乐开始播放之后就一直进入audio_play()中不能出来,所以我希望把检测蓝牙接收的部分放在audio_play()中,然后我就这样,下图为audio_play()中的一段:
while(res==FR_OK)//打开成功
{
dir_sdi(&wavdir,wavindextbl[curindex]); //改变当前目录索引   
        res=f_readdir(&wavdir,&wavfileinfo);       //读取目录下的一个文件
        if(res!=FR_OK||wavfileinfo.fname[0]==0)break; //错误了/到末尾了,退出
      fn=(u8*)(*wavfileinfo.lfname?wavfileinfo.lfname:wavfileinfo.fname);  
strcpy((char*)pname,"0:/MUSIC/"); //复制路径(目录)
strcat((char*)pname,(const char*)fn);   //将文件名接在后面
  LCD_Fill(60,190,lcddev.width,190+16,WHITE); //清除之前的显示
Show_Str(60,190,lcddev.width-60,16,fn,16,0); //显示歌曲名字 

if(USART3_RX_STA&0X8000) //接收到一次数据了
{
LCD_Fill(30,200,240,320,WHITE); //清除显示
  reclen=USART3_RX_STA&0X7FFF; //得到数据长度
  USART3_RX_BUF[reclen]=0; //加入结束符
if(reclen==9||reclen==8) //控制DS1检测
{
if(strcmp((const char*)USART3_RX_BUF,"+LED1 ON")==0)LED1=0; //打开LED1
if(strcmp((const char*)USART3_RX_BUF,"+LED1 OFF")==0)LED1=1;//关闭LED1
}
  LCD_ShowString(30,200,209,119,16,USART3_RX_BUF);//显示接收到的数据
  USART3_RX_STA=0;  
}  


audio_index_show(curindex+1,totwavnum);
key=audio_play_song(pname); //播放这个音频文件
if(key==KEY2_PRES) //上一曲
{
if(curindex)curindex--;
else curindex=totwavnum-1;
  }else if(key==KEY0_PRES)//下一曲
{
curindex++;  
if(curindex>=totwavnum)curindex=0;//到末尾的时候,自动从头开始
  }else break; //产生了错误  
}  
myfree(SRAMIN,wavfileinfo.lfname); //释放内存    
myfree(SRAMIN,pname); //释放内存    
myfree(SRAMIN,wavindextbl); //释放内存  
红色部分为我添加内容,不知道为什么蓝牙连接成功,音乐也可以播放,但是蓝牙接收+LED1 ON字符后竟然没有反应,不知道是哪里出了问题,求大神帮忙解决一下
注:附件为程序

音乐播放蓝牙控制.zip

10.33 MB, 下载次数: 423

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2015-9-16
在线时间
15 小时
发表于 2015-10-25 20:28:21 | 显示全部楼层
我想说 这个功能我也实现 可以蓝牙控制 也可以触摸屏控制
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165369
金钱
165369
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-10-25 21:43:11 | 显示全部楼层
仿真看下就知道了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-1-31 20:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表