无法使用两个 Arduino 之间的 i2c 串行通信接收正确的数据

Unable to receive correct data using i2c serial communication between two Arduino

我正在使用 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

似乎收到了三个字节,但数据没有正确传输。知道可能有错误或错误吗?谢谢!

由于您希望从 Wire 接收数据,我认为您的从站应该通过 Wire.read() 而不是 Serial.read() 接收数据。