完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
想用蓝牙控制MP3模块么?
|
|
|
|
是啊.既然可以用蓝牙控制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 %drn",sendcnt); u2_printf("ALIENTEK HC05 %drn",sendcnt); sendcnt++; if(sendcnt>99)sendcnt=0; } HC05_Sta_Show(); t=0; } t++; } SD_Initialize(); |
|
|
|
没有跳出while(1)的语句。就一直在这里面循环 没法给mp3供数据了。
|
|
|
|
你break都木有怎么跳出的?
|
|
|
|
谢谢....原来若要继续执行另一个程序的话需要强制停止第一个程序(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 %drn",sendcnt); u2_printf("ALIENTEK HC05 %drn",sendcnt); sendcnt++; if(sendcnt>99) { sendcnt=0; } } t=0; } t++; break; } HC05_Sta_Show(); } |
|
|
|
"+LED1 ON"和"+LED1 OFF"这两个字符串的长度
|
|
|
|
哇..我从来没想过要去数那字符串长度....唉....。另外请教,这段程序,
用蓝牙串口助手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 %drn",sendcnt); u2_printf("ALIENTEK HC05 %drn",sendcnt); sendcnt++; if(sendcnt>99) { sendcnt=0; } } t=0; } t++; break; } HC05_Sta_Show(); } //下面省略 |
|
|
|
手机显示连接成功,说明蓝牙已配对,这个时候LED引脚就会输出高电平,会进入双闪状态
|
|
|
|
|
|
|
|
我也没看出来,是不是你线没接好,提供的蓝牙范例能正常运行么
|
|
|
|
蓝牙范例确定可以执行跟变成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 %drn",sendcnt); u2_printf("ALIENTEK HC05 %drn",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,"< Play_Music(); } } |
|
|
|
LZ你这么贴代码看着累死了,{}连缩进都没有,你这么问问题有几个人能耐心给你看代码?
t++完直接break?那样t根本加不到50好吧。 if(t==50) { if(sendmask) { sprintf((char*)sendbuf,"ALIENTEK HC05 %drn",sendcnt); u2_printf("ALIENTEK HC05 %drn",sendcnt); sendcnt++; if(sendcnt>99) { sendcnt=0; } } t=0; } 这段根本没执行就跳出while到下一个代码段了 |
|
|
|
程序本来有缩排的,贴上去后也有缩排,但是按下送出后,
就变成没缩排,我也很傻眼.那么长的码,看得人还得自己COPY自己缩排,累死人了. 依照你的经验来看,break要加在哪?因为若不加break的话,下面的程序就不会执行, 因为一值都在跑回圈,加了后却只执行一次就跳开了......也难怪STA讯息永远都 是Disconnect...我晕 |
|
|
|
给break设置条件,满足你的条件才break
|
|
|
|
不是很懂...?另外,我发现到,将这行
if(USART2_RX_STA&0X8000)加到程序,没作用? 是不是因为key=KEY_Scan()只在Play_Music()出现, 若要用蓝牙控制的话,就得把这段写到main.c内?或是对key作init动作? |
|
|
|
您好,我最近也一直想做蓝牙+mp3的项目,可是遇到了一点问题,您可不可以帮忙看一下呢
|
|
|
|
发上来look look.....
|
|
|
|
只有小组成员才能发言,加入小组>>
367浏览 1评论
490浏览 1评论
609浏览 1评论
用PSOC6 BLE当外围设备,两者传输数据时,psoc6概率性出现蓝牙挂死的原因?
498浏览 1评论
是否有办法通过CYW20835板的固件发送BLE HCI命令?
473浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 20:48 , Processed in 1.065788 second(s), Total 109, Slave 93 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号