mylemonjuice 发表于 2014-5-15 10:56:56

怎么用蓝牙传输两个变量?

用两个模拟口读的数据,值的范围在0~1023,怎么用蓝牙传输呢?

单传一个值没问题,主要的困扰在怎么在接受端还原两个数据。

望大神解答!

Super169 发表于 2014-5-15 11:09:42

藍牙就當成是串口傳送.
你懂得傳一個大於 255 的值, 應該傳什麼也可以了吧.

簡單的傳送 4 個 byte 就是兩個 0 ~ 1023 的數了.
又或轉成 string 用 逗號(或其他符號)分隔, 傳送過去亦可, 方便除蟲, 但接收時的程序變我複雜了一點.

mylemonjuice 发表于 2014-5-15 11:29:17

Super169 发表于 2014-5-15 11:09 static/image/common/back.gif
藍牙就當成是串口傳送.
你懂得傳一個大於 255 的值, 應該傳什麼也可以了吧.



Mirf.send((byte *)&data1);
Mirf.send((byte *)&data2);

这样直接传两个过去是可以,可是接收端怎么分辨哪个是数据1跟2呢?

转换成string具体怎么操作?

Super169 发表于 2014-5-15 11:56:03

我不肯定 se nd 用 byte pointer 傳送會怎樣 (會根據 data1 的種類發出 H/L 兩個 byte 嗎?16/32 bit int 會有分別嗎? data1 是 long 是會如何?), 我通常用會簡單的分開 2 個 H/L byte 去發送, 接收時就不會出現不肯定的情況.MSB = (byte)(x >> 8); LSB = (byte)(x & 0xFF);
接收時可以肯定是 4 個 byte 的話, 兩個一組就可以簡單還原了.

用 string 就是把數值轉成 string, 例如 123 及 345 就先轉成 "123,345" 再發出去.這個好處是如果有其他 debug 用的 device, 例如 USB 接了電腦, 可以把發出的資料不經任何轉換直接發到電腦去檢查.但會比較浪費時間.

mylemonjuice 发表于 2014-5-15 12:00:54

Super169 发表于 2014-5-15 11:56 static/image/common/back.gif
我不肯定 se nd 用 byte pointer 傳送會怎樣 (會根據 data1 的種類發出 H/L 兩個 byte 嗎?16/32 bit int...

哈!我自己解决了!其实太简单了,我想得复杂了!
两个值都是0~1023。那我直接把一个值+1024,然后两个值轮流发送。
接收端判断值是否大于1024就可以了!!

Super169 发表于 2014-5-15 12:06:42

直接 +1024 就可以?
如果將兩個 2 byte合成一個 4 byte, 不是 應該 (unsigned long) data1 << 16 | data2 嗎?
你是否想說 data1 * 1024 + data2?
注意, data1 * 1024 時有可能超出 65535 的, 要先轉換成 unsigned long.

Super169 发表于 2014-5-15 12:08:35

oh...我有點明白了, 你是想分出 data1 及 data2, 而不是發出去的問題.
页: [1]
查看完整版本: 怎么用蓝牙传输两个变量?