极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11136|回复: 6

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

[复制链接]
发表于 2014-5-15 10:56:56 | 显示全部楼层 |阅读模式
用两个模拟口读的数据,值的范围在0~1023,怎么用蓝牙传输呢?

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

望大神解答!
回复

使用道具 举报

发表于 2014-5-15 11:09:42 | 显示全部楼层
藍牙就當成是串口傳送.
你懂得傳一個大於 255 的值, 應該傳什麼也可以了吧.  

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

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-15 11:29:17 | 显示全部楼层
Super169 发表于 2014-5-15 11:09
藍牙就當成是串口傳送.
你懂得傳一個大於 255 的值, 應該傳什麼也可以了吧.  

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

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

转换成string具体怎么操作?
回复 支持 反对

使用道具 举报

发表于 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 接了電腦, 可以把發出的資料不經任何轉換直接發到電腦去檢查.  但會比較浪費時間.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-15 12:00:54 | 显示全部楼层
Super169 发表于 2014-5-15 11:56
我不肯定 se nd 用 byte pointer 傳送會怎樣 (會根據 data1 的種類發出 H/L 兩個 byte 嗎?  16/32 bit int  ...

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

使用道具 举报

发表于 2014-5-15 12:06:42 | 显示全部楼层
直接 +1024 就可以?  
如果將兩個 2 byte合成一個 4 byte, 不是 應該 (unsigned long) data1 << 16 | data2 嗎?  
你是否想說 data1 * 1024 + data2?
注意, data1 * 1024 時有可能超出 65535 的, 要先轉換成 unsigned long.
回复 支持 反对

使用道具 举报

发表于 2014-5-15 12:08:35 | 显示全部楼层
oh...我有點明白了, 你是想分出 data1 及 data2, 而不是發出去的問題.
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 22:38 , Processed in 0.043743 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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