|
楼主 |
发表于 2016-5-7 01:41:24
|
显示全部楼层
soolge 发表于 2016-5-6 14:35
45l链接打不开啊,国内用不了谷歌,麻烦能给复制过来么,或者说如何多字节,我只想知道这个问题,麻烦了, ...
發送多字節就只是一個 loop 吧. 當然, Wire.write 亦提供了 Wire.write(array, size) 的指令, 可以一次發出多字節.
原文比較長, 要發到這裡很多地方要改, 我把部份有關的源碼抄過來吧.
(1) 由 master 發給 slave, :
假設你的資料都放在 array 內 byte data[10] = {0,1,2,3,4,5,6,7,8,9};
在 master 那邊, 只要在 beginTransmission 及 endTransmission 之間, 用 Wire.write 發出去就可以了.- Wire.beginTransmission(SLAVE_ADDRESS);
- Wire.write(data, 10);
- Wire.endTransmission();
复制代码 而 slave 的一邊, 在 receiveEvent 內, 以 Wire.read 去讀取就可以.- while (Wire.available()) {
- data[i++] = Wire.read();
- }
复制代码 (2) 由 slave 回傳給 master
在 slave 的 requestEvent() 用 Wire.write 發出就可以.- Wire.write("Super169",8);
复制代码 (注意, 在 requestEvent 是不需要加上 beginTransmission / endTransmission 的)
而 master 一邊, 有點特別, Wire 庫中 requestFrom 需要提供資料的長度.
經測試, 這個長度如果少於實際回傅的資料, 多出的部份會流失.
如果多於比實際回傅的資料, 餘下的會自動填上, 不會出錯的.
所以, 只要填上一個不少於實際回傳資料長度的數字就可以了.- Wire.beginTransmission(SLAVE_ADDRESS);
- Wire.requestFrom(SLAVE_ADDRESS, DATA_SIZE);
- if (Wire.available()) {
- data[i++] = Wire.read();
- }
- Wire.endTransmission();
复制代码 注意, slave 是不可以主動發送資料給 master 的.
所以啟動通訊的訊號 beginTransmission / endTransmission 都是由 master 發出.
slave 亦只可以因應 master 發出 requestFrom 的請求, 才可以回傳資料. |
|