无法使用两个 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()
接收数据。
我正在使用 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()
接收数据。