我正在使用i2c串行总线在两个Arduino(Uno = Master,Due = Slave)之间进行通信,而我在读取从机接收的数据时遇到了问题。
主设备使用Wire.write(command)
发送一些数据。从设备接收它并且通过指令receiveEvent(int howMany)
调用处理程序函数Wire.onReceive(receiveEvent)
。
以下是串行通信的简化代码:
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
}
void loop() {
Wire.beginTransmission(8);
byte command[] = {2, 5, 3};
Wire.write(command, 3);
Wire.endTransmission();
Serial.println("command sent...");
delay(1000);
}
#include <Wire.h>
int c = 0;
void setup() {
Serial.begin(9600);
Wire.begin(8);
Wire.onReceive(receiveEvent);
}
void loop() {
delay(1000);
}
void receiveEvent(int howManyBytes){
for(int iter=0; iter<howMany; iter++){
c = Serial.read();
Serial.print("c : ");
Serial.println(c);
}
}
c : -1
c : -1
c : -1
似乎接收到三个字节但数据未正确传输。有什么想法可能有错误或错误?谢谢!
答案 0 :(得分:1)
由于您希望来自Wire
的数据,我认为您的从属设备应通过Wire.read()
而不是Serial.read()
接收数据。