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

时间:2015-12-07 14:03:11

标签: arduino i2c master-slave

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

Slave的草图

#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

似乎接收到三个字节但数据未正确传输。有什么想法可能有错误或错误?谢谢!

1 个答案:

答案 0 :(得分:1)

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