I2C通信的问题
我现在想让1号机(地址为1),从3号机上读取数据。3号机里写了2行输出语句:
Wire.write(2);
Wire.write(3);
然后1号机里读取3号机:
Wire.requestFrom(3, 1);
结果只能读取到 2. 怎么写才能得到3呢?
Wire.write()不能多次使用?需要把输出的参数拼接一次输出?还是说Wire.requestFrom(3, 1);这句的参数不正确?
Wire.requestForm 的參數是
Wire.requestFrom(SLAVE_ADDRESS, DATA_SIZE);
你現在 requestForm(3,1) 是向 slave address = 3 的設備請求 1 個 數據.
在 Wire.read 前後加上 Wire.beginTransmission(SLAVE_ADDRESS);及 Wire.endTransmission();
而 Slave 要在 Wire.onRequest event 才發送. Super169 发表于 2017-11-24 10:01
Wire.requestForm 的參數是
谢谢! 之前我没加,现在改成这样可以了。
Wire.beginTransmission(1);
Wire.write(rx.header);
Wire.write(rx.byte1 & 0xF);
Wire.write(rx.byte2);
Wire.write(rx.byte3);
Wire.endTransmission();
Stormer 发表于 2017-11-24 14:02
谢谢! 之前我没加,现在改成这样可以了。
Wire.beginTransmission(1);
Wire.write(rx.he ...
在這裡其實我也有點不肯定.wire.beginTransmission 是否應該在 master 上執行.
以我的理解, i2c bus 應該是由 master 主導的, 所以, 必須由 master 去啟動 transmission.
所以我的做法, 是在 master 執行.
但你的程式, 應該是 1 號機是 master 吧.因為沒完整的程式, 只能從中推測, 應該只有 master 可以執行 requestForm.
那你最後改的, 就變成是從 slave 上進行 beginTransmission, 這裡我有點保留.
Super169 发表于 2017-11-24 14:26
在這裡其實我也有點不肯定.wire.beginTransmission 是否應該在 master 上執行.
以我的理解, i2c bus ...
刚看了下我之前写的问题,我回复里没说清,1号机的代码现在也改了,已经不用requestFrom()了。3号机发送信息给1号机,1号机触发Wire.onReceive(xxx)。 这样就OK了。 Stormer 发表于 2017-11-24 16:28
刚看了下我之前写的问题,我回复里没说清,1号机的代码现在也改了,已经不用requestFrom()了。3号机发送 ...
大神可以帮我看看我的I2C通信问题吗?谢谢了
传送门:https://www.geek-workshop.com/thread-39910-1-1.html
页:
[1]