OpenEdv-开源电子网

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

MP3+蓝牙

[复制链接]

16

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2013-8-19
在线时间
0 小时
发表于 2013-9-30 16:59:58 | 显示全部楼层 |阅读模式

原子哥:

有没有MP3+蓝牙的范例可以参考啊?

因为程序里面都有用到key0,若砍掉其

中一个,另一个就没办法执行?

谢谢

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

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-9-30 20:05:12 | 显示全部楼层
想用蓝牙控制MP3模块么?
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

16

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2013-8-19
在线时间
0 小时
 楼主| 发表于 2013-9-30 21:37:13 | 显示全部楼层
回复【2楼】xiaoyan:
---------------------------------
是啊.既然可以用蓝牙控制LED的亮灭,应该也可以用来控制MP3(VS1003)的播放,
但是一直卡在 while(1)写完后... MP3就没播放了

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,"lease Check!!!"); 
delay_ms(100);
}          
LCD_ShowString(30,90,200,16,16,"WK_UP:ROLE KEY0:SEND/STOP");  
LCD_ShowString(30,110,200,16,16,"ATK-HC05 Standby!");  
   LCD_ShowString(30,160,200,16,16,"Send:");
LCD_ShowString(30,180,200,16,16,"Receive:");

POINT_COLOR=BLUE;
HC05_Role_Show();

  while(1){
if(t==50)
{
if(sendmask) {
sprintf((char*)sendbuf,"ALIENTEK HC05 %d\r\n",sendcnt);
u2_printf("ALIENTEK HC05 %d\r\n",sendcnt);
sendcnt++;
if(sendcnt>99)sendcnt=0;
}
HC05_Sta_Show();     
t=0;     

      
t++;
}

SD_Initialize();
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-9-30 21:40:19 | 显示全部楼层
回复【3楼】leona6799:
---------------------------------
没有跳出while(1)的语句。就一直在这里面循环 没法给mp3供数据了。
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-9-30 21:55:35 | 显示全部楼层
回复【3楼】leona6799:
---------------------------------
你break都木有怎么跳出的?
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

16

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2013-8-19
在线时间
0 小时
 楼主| 发表于 2013-10-1 11:58:47 | 显示全部楼层
回复【5楼】xiaoyan:
---------------------------------
谢谢....原来若要继续执行另一个程序的话需要强制停止第一个程序(break)
.另外请教,在蓝牙范例中,程序有:
if(reclen==9||reclen==8) //控制DS1检测
这个9跟8打哪来啊?

while(HC05_Init()) 
{
LCD_ShowString(30,70,"ATK-HC05 Error!"); 
delay_ms(500);
LCD_ShowString(30,70,"lease Check!!!"); 
delay_ms(100);

}
LCD_ShowString(30,70,"BlueTooth Standby!");  
LCD_ShowString(30,90,"ROLE:Slave Mode");
if (HC05_Get_Role()!=1){ 
LCD_ShowString(30,90,"ROLE:Slave"); 
while(1){
if(t==50)
{
if(sendmask)
{
sprintf((char*)sendbuf,"ALIENTEK HC05 %d\r\n",sendcnt);
u2_printf("ALIENTEK HC05 %d\r\n",sendcnt);
sendcnt++;
if(sendcnt>99) 
{
sendcnt=0;
}
}
t=0;     

t++;
 break;
}
  HC05_Sta_Show(); 
}
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-10-1 12:33:01 | 显示全部楼层
回复【6楼】leona6799:
---------------------------------
"+LED1 ON"和"+LED1 OFF"这两个字符串的长度
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

16

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2013-8-19
在线时间
0 小时
 楼主| 发表于 2013-10-1 13:52:08 | 显示全部楼层
回复【7楼】xiaoyan:
---------------------------------
哇..我从来没想过要去数那字符串长度....唉....。另外请教,这段程序,
用蓝牙串口助手apk与STM32连接成功了,但是函数HC05_Sta_Show()的
STA状态还是无法变成Connect ?

void HC05_Sta_Show(void)
{
  if(HC05_LED)LCD_ShowString(30,110,"STA:Connected ");
  else LCD_ShowString(30,110,"STAisconnect");
}

int main (void) {  // 主程序
 //中間省略
//测试蓝牙
while(HC05_Init()) 
{
LCD_ShowString(30,70,"ATK-HC05 Error!"); 
delay_ms(500);
LCD_ShowString(30,70,"lease Check!!!"); 
delay_ms(100);

}
LCD_ShowString(30,70,"BlueTooth Standby!"); 
if (HC05_Get_Role()!=1){ 
LCD_ShowString(30,90,"ROLE:Slave"); 
while(1){
if(t==50)
{
if(sendmask)
{
sprintf((char*)sendbuf,"ALIENTEK HC05 %d\r\n",sendcnt);
u2_printf("ALIENTEK HC05 %d\r\n",sendcnt);
sendcnt++;
if(sendcnt>99) 
{
sendcnt=0;
}
}
t=0;     

t++;
 break;
}
  HC05_Sta_Show(); 
}
 //下面省略
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-10-1 14:55:28 | 显示全部楼层
手机显示连接成功,说明蓝牙已配对,这个时候LED引脚就会输出高电平,会进入双闪状态
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

16

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2013-8-19
在线时间
0 小时
 楼主| 发表于 2013-10-1 15:59:51 | 显示全部楼层
回复【9楼】xiaoyan:
---------------------------------
是有双闪,成功连接,但是STA还是disconnect......,
我看不出逻辑哪不对?
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-10-1 16:35:59 | 显示全部楼层
我也没看出来,是不是你线没接好,提供的蓝牙范例能正常运行么
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

16

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2013-8-19
在线时间
0 小时
 楼主| 发表于 2013-10-1 17:43:11 | 显示全部楼层
回复【11楼】xiaoyan:
---------------------------------
蓝牙范例确定可以执行跟变成connect....,底下是完整的程序:

#include "includes.h"

void HC05_Sta_Show(void)
{
  if(HC05_LED)LCD_ShowString(30,110,"STA:Connected ");
  else LCD_ShowString(30,110,"STAisconnect");
}
  
int main(void)
{     
u8 i,t;  
u8 sendmask;      
u8 sendcnt=0;
u8 sendbuf[20];   
u8 reclen=0; 
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化     
LCD_Init(); //初始化液晶  
KEY_Init(); //按键扫描初始化
LED_Init();         //LED初始化
SPI_Flash_Init(); //SPI FLASH初始化 
usmart_dev.init(72);   
POINT_COLOR=RED;   
LCD_ShowString(60,70,"Font checking...");       
//字体更新   
if(Font_Init())//字库不存在,则更新字库
{    
POINT_COLOR=RED;      
LCD_Clear(WHITE);
LCD_ShowString(60,50,"Mini STM32");
LCD_ShowString(60,60,"Font Updating...");     
//字体更新 
SD_Initialize();  //初始化SD卡           
  while(FAT_Init())//FAT 错误
{
LCD_ShowString(60,90,"FAT SYS ERROR");  
i= SD_Initialize();
if(i)//SD卡初始化 
{   
LCD_ShowString(60,110,"SD_CARD ERROR");
}   
delay_ms(500);
LCD_Fill(60,130,240,126,WHITE);//清除显示   
delay_ms(500);
LED0=!LED0;    
}  
LCD_Fill(60,130,240,126,WHITE);//清除显示   
  while(Update_Font()!=0)//字体更新出错
{   
LCD_ShowString(60,90,"SYSTEM FILE LOST");   
delay_ms(500);    
LCD_ShowString(60,90,"lease Check !");
delay_ms(500);    
LED0=!LED0;
};  
LCD_Clear(WHITE);


LCD_Clear(WHITE);
    Show_Str(30,30,"STM32 BT & MP3 TEST",16,0);   

POINT_COLOR=BLUE;

while(HC05_Init()) //蓝牙初始化
{
LCD_ShowString(30,70,"ATK-HC05 Error!"); 
delay_ms(500);
LCD_ShowString(30,70,"lease Check!!!"); 
delay_ms(100);

}
LCD_ShowString(30,70,"BlueTooth Standby!"); 
if (HC05_Get_Role()!=1){ 
LCD_ShowString(30,90,"ROLE:Slave"); 
while(1){
if(t==50)
{
if(sendmask)
{
sprintf((char*)sendbuf,"ALIENTEK HC05 %d\r\n",sendcnt);
u2_printf("ALIENTEK HC05 %d\r\n",sendcnt);
sendcnt++;
if(sendcnt>99) 
{
sendcnt=0;
}
}
t=0;     

t++;
 break;
}
  HC05_Sta_Show(); 
}
   
  SD_Initialize();  //初始化SD卡           
  while(FAT_Init())        //FAT 错误
{
LCD_ShowString(60,90,"FAT SYS ERROR");  
i= SD_Initialize();
if(i)                      //SD卡初始化 
{   
LCD_ShowString(60,110,"SD_CARD ERROR");
}   
delay_ms(500);
LCD_Fill(60,130,240,126,WHITE);        //清除显示   
delay_ms(500);
LED0=!LED0;    
}

POINT_COLOR=RED;
VS_Init();   
while(1)  
{           
  Show_Str(60,130,"存储器测试...",16,0);
LED0=0;    
VS_Ram_Test();     
Show_Str(60,130,"正弦波测试...",16,0);     
LED1=0;
VS_Sine_Test();
Show_Str(60,90,"<<MP3播放器>>",16,0);   
Play_Music();
}


}
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-10-1 22:06:05 | 显示全部楼层
LZ你这么贴代码看着累死了,{}连缩进都没有,你这么问问题有几个人能耐心给你看代码?

t++完直接break?那样t根本加不到50好吧。
if(t==50) 

    if(sendmask) 
    { 
        sprintf((char*)sendbuf,"ALIENTEK HC05 %d\r\n",sendcnt); 
        u2_printf("ALIENTEK HC05 %d\r\n",sendcnt);
        sendcnt++; 
        if(sendcnt>99)  
        { 
            sendcnt=0; 
        } 
    } 
    t=0;      
}  
这段根本没执行就跳出while到下一个代码段了





回复 支持 反对

使用道具 举报

16

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2013-8-19
在线时间
0 小时
 楼主| 发表于 2013-10-3 09:20:56 | 显示全部楼层
回复【13楼】ricefat:
---------------------------------
程序本来有缩排的,贴上去后也有缩排,但是按下送出后,
就变成没缩排,我也很傻眼.那么长的码,看得人还得自己COPY自己缩排,累死人了.
依照你的经验来看,break要加在哪?因为若不加break的话,下面的程序就不会执行,
因为一值都在跑回圈,加了后却只执行一次就跳开了......也难怪STA讯息永远都
是Disconnect...我晕
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-10-3 22:36:54 | 显示全部楼层
回复【14楼】leona6799:
---------------------------------
给break设置条件,满足你的条件才break
回复 支持 反对

使用道具 举报

16

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2013-8-19
在线时间
0 小时
 楼主| 发表于 2013-10-4 15:00:47 | 显示全部楼层
回复【15楼】ricefat:
---------------------------------
不是很懂...?另外,我发现到,将这行
if(USART2_RX_STA&0X8000)加到程序,没作用?

是不是因为key=KEY_Scan()只在Play_Music()出现,
若要用蓝牙控制的话,就得把这段写到main.c内?或是对key作init动作?
回复 支持 反对

使用道具 举报

8

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2015-9-19
在线时间
1 小时
发表于 2015-11-21 18:27:57 | 显示全部楼层
回复【2楼】xiaoyan:
---------------------------------
您好,我最近也一直想做蓝牙+mp3的项目,可是遇到了一点问题,您可不可以帮忙看一下呢
回复 支持 反对

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2015-11-21 18:54:04 | 显示全部楼层
回复【17楼】战舰威武:
---------------------------------
发上来look look.....
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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