Android 台灣中文網

標題: [已解]手機經藍芽模組接收從嵌入式裝置(MSP430)發送的資 [打印本頁]

作者: kansas73    時間: 2013-9-23 12:34
標題: [已解]手機經藍芽模組接收從嵌入式裝置(MSP430)發送的資
本帖最後由 kansas73 於 2013-10-7 21:25 編輯

我還是個學生,目前正在開發android的程式
我們的專題需要使用手機APP連接藍芽模組,去接收寫在MSP430裏頭的資料
目前已經寫出大概的雛型,當然也是從網路上模仿出來的
參考網站:
其實這篇文章把藍芽如何開關、搜尋、連接、傳送、接收都寫得很完整,
目前我的進度是已經成功地接收到藍芽傳出來的資料了
傳送資料:110V(ASCII)手機顯示110V(ASCII),這當初只是要測試能否正接收資料所寫的一個簡單的測試程式而已
而我們真正要的功能是要寫在MSP430裏頭但資料都是16進制的,ex.0x31 ox32 0x2e......etc
現在我困惑的是要怎麼樣才能把16進制資料轉換成我在手機上可以顯示出,ex.116.2(我們要測電壓)
也就是把0x310x310x360x2e0x32轉換成在手機上可以顯示出116.2

msg= new String(data,0,length, "ASCII")+"
";
上面這個code是我參考的文章裏頭版主將收到的資訊轉成ASCII
手機是不是只能顯示出ASCII呢?
現在我要把16進制轉換成ASCII要怎麼寫呢?

完成程式碼如下
private class SppReceiver extends Thread{           
             private InputStream input=null;
             public SppReceiver(InputStream in){
                     input = in;
                     Log.i(tag, "SppReceiver");
             }
             /*接收SPP訊息...*/
             public void run(){
                     int length=0;
                     byte[] data  = new byte[1024];
                     if (input == null){
                             Log.d(tag, "InputStream null");
                             return;
                     }
                     //================SLEEP指令↓===================
                     while (true){
                             try{                 
                                     Thread.sleep(820);
                                     length=input.read(data);
                                     Log.i(tag, "SPP receiver");
                                     if (length>0){
                                             //Log.i(tag,"R: "+ new String(data,0,length, "ASCII"));
                                             msg= new String(data,0,length, "ASCII")+"
";
                                             btHandler.sendEmptyMessage(0);
                                     }
                             }catch (Exception e){//IOException e
                                     Log.e(tag, "SppReceiver_disconnect");
                                     disconnect();                                 
                             }
                     }
                     //================SLEEP指令↑================             
                     }
                     
     }
     /*將訊息顯示再Textview中畫面*/
     Handler btHandler = new Handler(){
            public void handleMessage(Message m){
                    msgVolText.setText(msg);
            }
     };
作者: A130612p417    時間: 2013-10-2 08:51
網路搜尋到的,看看有沒有幫助

String hex = "FA";
int intValue = Integer.parseInt(hex, 16);
作者: kansas73    時間: 2013-10-3 23:30
A130612p417 發表於 2013-10-2 08:51
網路搜尋到的,看看有沒有幫助

String hex = "FA";


謝謝大大的回覆
我知道如果你自己鍵入一個16進制的字串
想要轉換就如同您所建議的這樣非常簡單
不過如果想我是需要從藍芽去接收資料再轉乘10進制就不簡單囉
但我還是有打出來
我把資料丟進一個陣列然後再和0xff去&
再來用Integer.toString 顯示出來就OK囉!!!!!
謝謝A130612p417的解答希望可以幫到其他有需要的人




歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1