日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Android蓝牙串口程序开发

發布時間:2025/5/22 77 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android蓝牙串口程序开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.



本文主要介紹了針對android的藍牙串口上位機開發。

程序下載地址:點擊打開鏈接

一、幀定義

androidclient依照一定的數據幀格式通過藍牙串口發送數據到連接到MCU的藍牙從機。MCU接收到數據后。依照幀格式的定義,接收數據幀。并解析數據幀,得到須要的數據。

androidclient依照下面幀格式來發送和接收數據。




1.1client發送的數據幀內容

發送頻率:10Hz



幀校驗的和是從幀長開始到幀校驗前全部數據的和對256取余。

即sum%256。

pitch roll yaw數據各16位,由高低8位組成。MCU接收數據時須要將其再復合成一個16位數據。

0x5A:幀頭

14:針長度

0xA1:幀功能,標明這幀數據是pitch yaw roll內容。

pitch_set_H:pitch高8位

pitch_set_L:pitch低8位

...

...

幀校驗:(幀長+幀功能+數據)%256

0xA5:幀尾。

(注:幀是這么定義的,但實際上編寫接收程序的時候。我將幀尾0xA5當作了一幀數據的幀頭。

這樣幀頭就變成了 0xA5 0x5A。此時就不存在幀尾了)

以下是androidclient發送字節信息的程序:

<span style="white-space:pre"> </span>b[0] = (byte)0XA5; //幀頭b[1] = (byte)14; //幀長b[2] = (byte)0xA1; //幀功能b[3] = (byte)(pitchSet>>8); //數據b[4] = (byte)(pitchSet);b[5] = (byte)(rollSet>>8);b[6] = (byte)(rollSet);b[7] = (byte)(yawSet>>8);b[8] = (byte)(yawSet);b[9] = (byte)0;b[10] = (byte)0;b[11] = (byte)0;b[12] = (byte)0;int temp = 0;for(int j=1;j<13;j++){temp = temp+b[j];}b[13] = (byte)(temp%256); //校驗 b[14] = (byte)0x5A; //幀結束
1.2MCU接收幀數據

因為串口是依照一個一個字節的格式發送數據,所以MCU接收數據時,要依照client發送的幀格式的定義。找到一幀數據的開始與結束,確認一幀數據接收無誤后,再將當中的數據解析出來。

使用一個為來標志(狀態機)接收程序對一陣數據的接收狀態。

編寫的DSP2808接收程序例如以下:

定義數據類型

typedef struct {int status; //data statusint Rx_Data; //the receivced dataint data[15]; //int rx_buf[13];int buf_index;int sum;int yawSet;int pitchSet;int rollSet; }Sci_Data; Sci_Data sci_data;

interrupt void SCIB_RX_ISR() //以中斷的方式接收數據 { //接收程序sci_data.Rx_Data = ScibRegs.SCIRXBUF.all; ScibRegs.SCIFFRX.bit.RXFFOVRCLR = 1; //clear overflow flagScibRegs.SCIFFRX.bit.RXFFINTCLR = 1; //clear the interrupt flagPieCtrlRegs.PIEACK.all |= PIEACK_GROUP9; //enable more interrupt from PIE group 9Decode_Frame(sci_data.Rx_Data); //數據幀解碼 }void Decode_Frame(int rx_data) {if(sci_data.status==0 && rx_data == 0x5A) //推斷幀尾 假設找到幀尾,status=1{sci_data.status = 1;}else if(sci_data.status == 1 &&rx_data == 0xA5) //幀尾下一個字符是幀頭。status=2{sci_data.status = 2;}else if(sci_data.status ==2) //幀頭后是13個字節數據 從幀長到幀校驗{if(sci_data.buf_index<13){sci_data.rx_buf[sci_data.buf_index] = rx_data; // 0-12 to save data length function data... sum if(sci_data.buf_index<12) //求取校驗和{sci_data.sum += sci_data.rx_buf[sci_data.buf_index];}sci_data.buf_index++;}if(sci_data.buf_index >= 13){if(sci_data.rx_buf[12] == sci_data.sum%256){int j=0;for(j=0;j<10;j++){sci_data.data[j] = sci_data.rx_buf[j+2]; //save data to the data buf}sci_data.pitchSet = sci_data.data[0]<<8|sci_data.data[1];}sci_data.buf_index = 0;sci_data.status = 0;sci_data.sum = 0;}}else {sci_data.buf_index = 0;sci_data.status = 0;sci_data.sum = 0;} }
這樣DSP2808就接收到了從client發送來的數據。保存在sci_data.pitchSet、sci_data.rollSet、sci_data.yawSet三個變量中。?


二、androidclient開發流程

問題:檢測藍牙的連接狀態

android藍牙串口程序狀態機

在程序中,通過broadcast來檢測藍牙的連接狀態,根絕藍牙的連接狀態來決定操作。

打開藍牙---掃描設備---選擇設備---連接設備---連接正常---發送數據---






轉載于:https://www.cnblogs.com/clnchanpin/p/7060216.html

總結

以上是生活随笔為你收集整理的Android蓝牙串口程序开发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。