迪文科技论坛

 找回密码
 立即注册
搜索
查看: 284|回复: 3

【2024.3.15获奖项目】音频播放器 迪文屏加安卓手机 BLE 串口

[复制链接]

567

主题

167

回帖

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11978
发表于 2024-4-8 17:59:45 | 显示全部楼层 |阅读模式
【开源】音频播放器 迪文屏加安卓手机 BLE 串口

视频演示效果链接:


1.简介
这次的主要控制结构是迪文屏通过串口4和播放芯片通信,播放芯片通过蓝牙和安卓手机通信,从而达到双向联动控制迪文屏幕大家比较熟悉,看起来比较简单,其它的代码,整个比较大,看起来可能会吃力点。

屏幕的界面控件如下





2.部分屏幕参考代码:
  1. int main(void)
  2. {   
  3.        INIT_CPU();
  4.        T2_Init();
  5.        UART4_Init();
  6.        EA=1;
  7. //     UART4_SendStr("hello",sizeof("hello"));
  8. //     WDT_ON();//打开开门狗

  9.        while(1)
  10.        {   
  11. //            WDT_RST();//喂狗
  12.               Process();
  13.        }
  14. }

  15. void UART4_Init(void)
  16. {
  17. //UART4 波特率设置:
  18. //BODE2_DIV_H=CPU 主频/(8*波特率) 。
  19. //206438400/8/115200=224=0xe0
  20. //206438400/8/921600=28=0x1C
  21. //206438400/8=25804800/230400=112=0x70

  22.        SCON2T=0x80;
  23.        SCON2R=0x80;
  24. BODE2_DIV_H=0x00;    //FCLK/(8*DIV)
  25. BODE2_DIV_L=0xe0;//;  921600 波特率
  26. //     BODE2_DIV_H=0x00;     //FCLK/(8*DIV)
  27. //     BODE2_DIV_L=0x70;

  28.        //ES3T=1;
  29.        ES2R=1;
  30.        EA=1;
  31. }

  32. void TenMsHandle(void)
  33. {
  34.        if(!TenmsFlag)
  35.               return;
  36.        TenmsFlag=0;

  37.        SourcePress();//音源改变
  38.        PlayCtrPress();//播放状态改变
  39.        VolCtrSlider();//音量改变
  40.        VolLogSlider();//音量改变

  41.        ReadBtState();//读取蓝牙状态
  42. }

  43. void SourcePress(void)
  44. {
  45.        charTouchKey[2]={0,0};
  46.   u8Sdata[2];

  47.        read_dgusii_vp(0x3000,TouchKey,1);
  48.        if(TouchKey[1]==0)
  49.               return;

  50. Sdata[1]=0;
  51.        switch(TouchKey[1])
  52.        {
  53.               case1://U盘
  54.                      Sdata[0]=1;
  55.                      SendDataToBT(Write_Run_Mode,Sdata,1);
  56.               break;

  57.               case2://外部LineIn输入
  58.                      Sdata[0]=2;
  59.                      SendDataToBT(Write_Run_Mode,Sdata,1);
  60.               break;

  61.               case3://蓝牙
  62.                      Sdata[0]=3;
  63.                      SendDataToBT(Write_Run_Mode,Sdata,1);
  64.               break;
  65.        }

  66.        write_dgusii_vp(0x3003,TouchKey,1);
  67.        memset(TouchKey,0,sizeof(TouchKey));
  68.        write_dgusii_vp(0x3000,TouchKey,1);
  69.        ReadBtStatecount=0;
  70. }

  71. void PlayCtrPress(void)
  72. {
  73.        charTouchKey[2]={0,0};
  74.   u8Sdata[2];

  75.        read_dgusii_vp(0x3001,TouchKey,1);
  76.        if(TouchKey[1]==0)
  77.               return;
  78. Sdata[1]=0;

  79.        switch(TouchKey[1])
  80.        {
  81.               case1://上一曲
  82.                      Sdata[0]=1;
  83.                      SendDataToBT(Write_Next_Pre_PT,Sdata,1);
  84.               break;

  85.               case2://播放暂停
  86.                      Sdata[0]=2;
  87.                      SendDataToBT(Write_Next_Pre_PT,Sdata,1);
  88.               break;

  89.               case3://下一曲
  90.                      Sdata[0]=3;
  91.                      SendDataToBT(Write_Next_Pre_PT,Sdata,1);
  92.               break;
  93.        }

  94.        memset(TouchKey,0,sizeof(TouchKey));
  95.        write_dgusii_vp(0x3001,TouchKey,1);  
  96.        ReadBtStatecount=0;
  97. }
复制代码

3.部分安卓参考代码如下:

安卓是用QT 写的,主要是写BLE的连接,和通信控制,和界面,其中一个代码如下



  1. ui->setupUi(this);
  2.     bluetooth_ble_Tool=new Bluetooth_ble_Tool("dwin_bt(BLE)");
  3.     ui->label_localBT_Name->setText(bluetooth_ble_Tool->getLocalName());
  4.     connect(bluetooth_ble_Tool,&Bluetooth_ble_Tool::BlueSearchConnectState,
  5.            this,&BLE_PairPage::BlueSearchConnectState);
  6.     //btchat=new BtChat();
  7.     //btchat->set_ble_Tool(bluetooth_ble_Tool);
  8.     //btchat->init_Page();
  9.     //btchat->hide();
  10.     devicecommHandle=new DeviceComm();
  11.     devicecommHandle->set_ble_Tool(bluetooth_ble_Tool);
  12.     devicecommHandle->InitDevice();
  13.     mwin=new mainwin();
  14.     mwin->hide();
  15.     connect(mwin,&mainwin:layChangeMode,
  16.            devicecommHandle,&DeviceComm:layChangeMode);//写模式改变下发
  17.     connect(mwin,&mainwin:layCtrPreNextSt,
  18.            devicecommHandle,&DeviceComm:layCtrPreNextSt);//写上下曲
  19.     connect(mwin,&mainwin:layMusicVolChange,
  20.            devicecommHandle,&DeviceComm:layMusicVolChange);//写音量改变下发
  21.     connect(devicecommHandle,&DeviceComm::ReadPlayMode,
  22.            this,[=](int mode){//设置目前的模式
  23.                 qDebug()<<"mode:"<<mode;
  24.                 mwin->B_Upan->setChecked(false);
  25.                 mwin->B_AUX->setChecked(false);
  26.                 mwin->B_BT->setChecked(false);
  27.                 if(mode==1)
  28.                     mwin->B_Upan->setChecked(true);
  29.                 else if(mode==2)
  30.                     mwin->B_AUX->setChecked(true);
  31.                 else if(mode==3)
  32.                     mwin->B_BT->setChecked(true);
  33.             });
  34.     connect(devicecommHandle,&DeviceComm::ReadPlayMusicVol,
  35.            this,[=](int vol){//设置音量显示
  36.                 mwin->QS_MainVol->setValue(vol);
  37.            });
  38.     connect(bluetooth_ble_Tool,&Bluetooth_ble_Tool::BLE_Link_error,
  39.            this,[=](){
  40.                 this->show();
  41.                 mwin->hide();
  42.                 devicecommHandle->TimerStopReadDeviceST();
  43.                 this->ui->progressBar->setValue(0);
  44.             });


  45. void BLE_PairPage::on_pushButton_clicked(){    bluetooth_ble_Tool->SetOperUuidServer(QBluetoothUuid(serviceUuid));    //ui->label_localBT->clear();    //ui->label_localBT_Name->setText(bluetooth_ble_Tool->getLocalName());    bluetooth_ble_Tool->startFindConnectBle();    //bluetooth_ble_Tool->startStateprogressBar();     ui->pushButton->setEnabled(false);    ui->pushButton->setText("正在搜索");     connect(bluetooth_ble_Tool,&Bluetooth_ble_Tool::BlueBLE_FindDevicefinished,            this,[=](bool ok){                ui->pushButton->setEnabled(true);                ui->pushButton->setText("开始检测连接蓝牙");                 if(ok==false)                {                    QMessageBox::information(this,tr("搜索状态"),"搜索不到设备,请查看设备是否已经开机,或者有其它手机已经连接上?");                }            });} void BLE_PairPage::BlueSearchConnectState(Bluetooth_ble_Tool::startStateprogressBar_em Linkst, int progress){    ui->progressBar->setValue(progress);     if(Linkst>=Bluetooth_ble_Tool::Ble_OtherError)    {        QMessageBox::information(this,tr("连接提示"),bluetooth_ble_Tool->getErrorinfo());        ui->label_tips->setText(bluetooth_ble_Tool->getErrorinfo());    }    else if(Linkst>=Bluetooth_ble_Tool::Ble_Deconnect_device)    {        QMessageBox::information(this,tr("连接提示"),"有错误");        ui->label_tips->setText("有错误");    }    else if(Linkst==Bluetooth_ble_Tool::Ble_Connect_characterOk)    {//        QMessageBox::information(this,tr("成功连接"),bluetooth_ble_Tool->getErrorinfo());         ui->label_tips->setText("已成功连接");          this->hide();         mwin->show();         devicecommHandle->TimerStartReadDeviceST(100);         //btchat->show(); //         disconnect(bluetooth_ble_Tool,&Bluetooth_ble_Tool::BlueSearchConnectState,//                 this,&BLE_PairPage::BlueSearchConnectState);    }    else    {         ui->label_tips->setText("搜索连接中");    }}
  46. 蓝牙代码 列出一点点吧

  47. extern void app_audio_direct_set_volume(u8 value);extern int user_app_send_user_data(u16 handle, u8 *data, u16 len, u8 handle_type); u8 Add_crc(u8 *data,u16 datalen){    u16 count=0;    u8 ret=0;     for(count=0;count<datalen;count++)    {        ret+=data[count];    }     return ret;}

  48. void UserBleRetRec(u16 retcmd,u8 *data,u16 datalen){    u8 senddata[250];    u16 i=0;    memset(senddata,0,sizeof(senddata));     senddata[i++]=Target_addr;    senddata[i++]=0;    senddata[i++]=0;    senddata[i++]=retcmd>>8;    senddata[i++]=retcmd;    memcpy(&senddata,data,datalen);    i+=datalen;    senddata[1]=(i+1)>>8;    senddata[2]=i+1;    senddata=Add_crc(senddata,i);    i++;     user_app_send_user_data(ATT_CHARACTERISTIC_ae05_01_VALUE_HANDLE,        senddata, i, ATT_OP_AUTO_READ_CCC);} void UserBleRecHandle(u8 *data,u16 len){    u16 cmd=0;    int ret=0;    u8 retok=1;     if(data[0]!=Local_addr)        return;     cmd=data[3]<<8|data[4];     switch(cmd)    {        case Write_Run_Mode:            log_info("UserBleRecHandle %d\r\n",data[5]);            if(data[5]==1)//U盘模式            {#if TCFG_APP_MUSIC_EN            ret = app_task_switch_to(APP_MUSIC_TASK);#endif            }            else if(data[5]==2)//外部输入            {#if TCFG_APP_LINEIN_EN            ret = app_task_switch_to(APP_LINEIN_TASK);#endif            }            else if(data[5]==3)//蓝牙            {#if TCFG_APP_BT_EN            ret = app_task_switch_to(APP_BT_TASK);#endif            }             if(TRUE==ret)             retok=1;            else             retok=0;               UserBleRetRec(Write_Run_Mode,&retok,1);        break;                case Write_Next_Pre_PT:            if(data[5]==1)//上一曲            {                app_task_put_key_msg(KEY_MUSIC_PREV,0);            }            else if(data[5]==2)//播放暂停            {                app_task_put_key_msg(KEY_MUSIC_PP,0);            }            else if(data[5]==3)//下一曲            {                app_task_put_key_msg(KEY_MUSIC_NEXT,0);            }              retok=1;            UserBleRetRec(Write_Next_Pre_PT,&retok,1);        break;                      case Write_VolChange:            app_audio_direct_set_volume(data[5]);              retok=1;            UserBleRetRec(Write_VolChange,&retok,1);        break;         case Read_device_ST:            u8 retst[10];            retst[0]=app_var.music_volume;            retst[1]=app_get_curr_task();            if(retst[1]==APP_MUSIC_TASK)                retst[1]=1;            else if(retst[1]==APP_LINEIN_TASK)                retst[1]=2;            else if(retst[1]==APP_BT_TASK)                retst[1]=3;                 else                 retst[1]=0;            UserBleRetRec(Read_device_ST,retst,2);        break;    }}
复制代码


备注说明:如需源码,请参考此链接:http://inforum.dwin.com.cn:20080/forum.php?mod=viewthread&tid=9043







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

1

主题

9

回帖

86

积分

注册会员

Rank: 2

积分
86
发表于 2024-4-8 22:19:19 | 显示全部楼层
想要这个项目的代码,用于学习。我的邮箱:jsx7902@126.com   谢谢!
回复

使用道具 举报

0

主题

1

回帖

23

积分

新手上路

Rank: 1

积分
23
发表于 2024-4-22 16:35:15 | 显示全部楼层
请提供源码,用于学习。邮箱:28743488@qq.com,谢谢。
回复

使用道具 举报

0

主题

452

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

积分
11086
发表于 2024-4-22 17:15:25 | 显示全部楼层
可以参考这个链接:
【开源】音频播放器 迪文屏加安卓手机 BLE 串口
http://inforum.dwin.com.cn:20080 ... =9992&fromuid=14580
(出处: 迪文科技论坛)

回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-24 18:08 , Processed in 0.058412 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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