看板 C_and_CPP 關於我們 聯絡資訊
: 我目前也是類似要送資料到嵌入式晶片裡, : 本來是用RS232送 是char 8bits合成一個float : union DataSpace : { : unsigned char Quarter[4]; : float Full; : }Float_Data; : 後面是用 Float_Data.Quarter[k]= (char) 接收到的值 : 不過現在想改成用藍芽 不過發送的好像是ASCII 電腦 藍芽 嵌入式 3 -------> --------> '3' 0x03 0x33 所以現在的情況是像這樣嗎? 我怎麼覺得是藍芽模組的問題... 感覺他把你所有訊息都 +'0' 傳出去 我不確定你是想傳 0x03 還是 0x40400000 (char)3 (float)3 我假設是前者 : 所以像是本來送1 : 改成藍芽發送接收到的就會變成像是 Quarter[0]的 value是"1" decimal是49 : 可是這樣出來的full就會變成錯誤的 雖然decimal還是49 : 不過因為是float 所以value就變了 : ======================================= : 大概像是之前是一個float分成4個char的儲存位置存 : 送3進去Float_Data.Full收到的就是3 : 不過現在因為直接送的是char 送進去只是存到Float_Data.Quarter[0]="3"的字串 : Float_Data.Full出來的就不會是要的float 3這個值 : 本來想說單獨抓Float_Data.Quarter[0]出來轉換之類 : 試過什麼float直接強制轉換 或是atof等等的好像也都沒用 : 不知道這種問題要怎麼處理 謝謝 如果確定是藍芽把你 +'0' 那接收端收進來就先 -'0' 實際上你也有做啊 mm = (float)Float_Data.Quarter[0] - 48; 不過因為這個"屍塊"是要拿去"組合"成float 屍塊沒有任何的數字意義 他只是float的一部分 你不能幫他轉型 要維持原本的樣子 char mm; mm = Float_Data.Quarter[0] - 48; 收集四個屍塊在陣列裡擺好 float格式的資料就組好了~ 站內信失敗XD 發到版上了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.230.107.225 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1465204017.A.D29.html ※ 編輯: chuegou (36.230.107.225), 06/06/2016 17:09:07
wxtab019: 目前是去找一些手機app 像bluetooth terminal 來用 06/06 17:31
wxtab019: 用手機傳 這個感覺是傳ASCII碼的 所以才又做處理 06/06 17:32
wxtab019: 本來用RS232傳是直接傳float數值 可是HC-06是傳char 06/06 17:33
wxtab019: float可以傳小數 一長串數字 不過char 1個就只能存1個 06/06 17:33
wxtab019: 所以現在才在想怎麼弄 謝謝你的回答 06/06 17:34
wxtab019: 最後還是希望能轉回float 不是char或str 06/06 17:35
把float拆成char[4] 傳4個char就是你要的效果了阿 ※ 編輯: chuegou (36.230.107.225), 06/06/2016 17:40:53
wxtab019: 是這樣沒錯 只是有時候像只傳 2 就只有1個char 06/06 17:49
wxtab019: 或是要傳12345 12.34之類的 就超過4個char了 06/06 17:50
wxtab019: 直接用float傳沒這問題 用char傳就不知道空的或多的怎麼 06/06 17:50
IKAFIRE: 我想你誤會用char傳的意思了 06/06 17:53
對... wx你有點誤會這個union的用法 union DataSpace { unsigned char Quarter[4]; float Full; }Float_Data; 你要傳3 Float_Data.Full = (float)3; 然後把 Float_Data.Quarter[0] Float_Data.Quarter[1] Float_Data.Quarter[2] Float_Data.Quarter[3] 傳到接收端 接收端再把4個組合起來 這4個資料看起來會是 0x40 0x40 0x00 0x00 組合起來是 0x40400000 以float格式來說 就是3.00000 就是你要傳的3 所以不管你數字是多少都是固定大小喔 ※ 編輯: chuegou (36.230.107.225), 06/06/2016 18:11:16
chuegou: 慘...我現在覺得我還沒完全理解原PO的問題(苦笑) 06/06 18:45
wxtab019: 因為目前是要傳的值存在Quarter[0] Quarter[1]...[2][3] 06/06 19:20
wxtab019: 只是例如傳3的話 他就只存在Quarter[0] 後面就沒東西 06/06 19:21
wxtab019: 像我在手機輸入3(ASCII) 從藍芽傳到HC-06 再傳到晶片 06/06 19:25
wxtab019: 因為HC-06一次傳只傳1個char 8bits 所以只會存在[0] 06/06 19:26
wxtab019: 設中斷flag接收到4個char中斷一次的話 只收到一個就還不 06/06 19:27
wxtab019: 會中斷 所以會還沒辦法收到值 06/06 19:27
wxtab019: 目前大概先暫時放下這邊了...之後弄懂怎麼用再繼續 謝謝 06/06 19:29
wxtab019: 這幾天都在弄這個 一開始不知道藍芽的傳輸資料型態 06/06 19:31
理解了 現在問題是發送端沒辦法做到float拆成char[4] 他不會辨識char以外的格式 對吧? ※ 編輯: chuegou (36.230.107.225), 06/06/2016 19:35:32
wxtab019: 一直抓不到資料 還要去找baudrate設定 06/06 19:32
wxtab019: 然後突然抓的到資料 可是是錯的 才發現是ASCII 用char傳 06/06 19:33
wxtab019: 以後不懂的東西還是不要這樣趕工好了... 06/06 19:33
wxtab019: 發送端目前試是只能送char而已 本來用RS232的話可以 06/06 19:37
wxtab019: 要找到懂C又懂dsPIC 還懂藍芽傳輸+通訊協定 串列式傳輸 06/06 19:49
wxtab019: 等等的 好像也不太容易阿XD 06/06 19:49
ogisun: 系列文有一篇指標是普遍的拆法 不然就自己寫IEE754轉換 06/08 01:26
ogisun: 所以wxtab的問題是3沒辦法拆成40 40 00 00這樣嗎? 06/08 01:28
wxtab019: 雖然可能因為是我用的app關係 只是去google找一些來用 06/08 17:30