I2C 通信在 2 个 arduino 之间不起作用
I2C Communication not working between 2 arduinos
我正在尝试让两个 Arduino 通过 I2C 相互通信。我正在尝试从发射器向接收器发送一个字符串,让接收器接收它并将其放入 SD 卡中。 if(Wire.available() > 0) 也不执行,我不确定这是发射器或接收器还是硬件的问题。对于硬件,我有 A4 -> A4、A5 -> A5 和 GND 到 GND。我不确定为什么无法接收或传输通信。这是我 运行 -
的代码
发射器:
void setup(){
Serial.begin(115200);
Wire.begin();
}
void loop(){
Wire.beginTransmission(9);
Wire.write("GPS: ");
Wire.write(Latitude + Longitude).c_str());
Wire.write("Altitude: ");
Wire.write((Altitude).c_str());
Wire.write(("Parachute: " + ReceivedParachuteStatus).c_str());
digitalWrite(interruptPin, HIGH);
digitalWrite(interruptPin, LOW);
Wire.endTransmission();
}
接收者:
void interruptServiceRoutine() {
if (Wire.available() > 0) {
if (SD.begin(CS_PIN)) {
failCounter = 0;
failCounterCOM = 0;
LED_Trigger = true;
incomingString = Wire.read();
File SD_file = SD.open("log.txt", FILE_WRITE);
SD_file.print(incomingString);
Serial.println(incomingString);
SD_file.close();
} else {
if (SD.begin(CS_PIN)) {
failCounter++;
File SD_file = SD.open("log.txt", FILE_WRITE);
SD_file.println("SD Card Connection Fail: " + failCounter);
}
Serial.println("SD Card Connection Fail: " + failCounter);
SD_file.close();
}
} else {
if (SD.begin(CS_PIN)) {
failCounterCOM++;
File SD_file = SD.open("log.txt", FILE_WRITE);
SD_file.println("Master MCU COM fail: " + failCounterCOM);
}
Serial.println("Master MCU COM fail: " + failCounterCOM);
SD_file.close();
}
}
void setup() {
Serial.begin(115200);
Wire.begin(9);
pinMode(LED, OUTPUT);
pinMode(interruptPin, INPUT);
attachInterrupt(digitalPinToInterrupt(interruptPin), interruptServiceRoutine, RISING);
if (!SD.begin(CS_PIN))
Serial.println("Failed to connect to SD card");
}
问题是 incomingString = Wire.read();应该在 receiveEvent() 中;功能。您需要 Wire.onReceive 中的 those.And 之一。现在我的代码几乎更新为 -
void receiveEvent(int bytes){
incomingString = Wire.read();
}
void interruptServiceRoutine() {
if (Wire.available() > 0) {
if (SD.begin(CS_PIN)) {
failCounter = 0;
failCounterCOM = 0;
LED_Trigger = true;
File SD_file = SD.open("log.txt", FILE_WRITE);
SD_file.print(incomingString);
Serial.println(incomingString);
SD_file.close();
} else {
if (SD.begin(CS_PIN)) {
failCounter++;
File SD_file = SD.open("log.txt", FILE_WRITE);
SD_file.println("SD Card Connection Fail: " + failCounter);
}
Serial.println("SD Card Connection Fail: " + failCounter);
SD_file.close();
}
} else {
if (SD.begin(CS_PIN)) {
failCounterCOM++;
File SD_file = SD.open("log.txt", FILE_WRITE);
SD_file.println("Master MCU COM fail: " + failCounterCOM);
}
Serial.println("Master MCU COM fail: " + failCounterCOM);
SD_file.close();
}
}
void setup() {
Serial.begin(115200);
Wire.begin(9);
Wire.onReceive(receiveEvent);
pinMode(LED, OUTPUT);
pinMode(interruptPin, INPUT);
attachInterrupt(digitalPinToInterrupt(interruptPin), interruptServiceRoutine, RISING);
if (!SD.begin(CS_PIN))
Serial.println("Failed to connect to SD card");
}```
我正在尝试让两个 Arduino 通过 I2C 相互通信。我正在尝试从发射器向接收器发送一个字符串,让接收器接收它并将其放入 SD 卡中。 if(Wire.available() > 0) 也不执行,我不确定这是发射器或接收器还是硬件的问题。对于硬件,我有 A4 -> A4、A5 -> A5 和 GND 到 GND。我不确定为什么无法接收或传输通信。这是我 运行 -
的代码发射器:
void setup(){
Serial.begin(115200);
Wire.begin();
}
void loop(){
Wire.beginTransmission(9);
Wire.write("GPS: ");
Wire.write(Latitude + Longitude).c_str());
Wire.write("Altitude: ");
Wire.write((Altitude).c_str());
Wire.write(("Parachute: " + ReceivedParachuteStatus).c_str());
digitalWrite(interruptPin, HIGH);
digitalWrite(interruptPin, LOW);
Wire.endTransmission();
}
接收者:
void interruptServiceRoutine() {
if (Wire.available() > 0) {
if (SD.begin(CS_PIN)) {
failCounter = 0;
failCounterCOM = 0;
LED_Trigger = true;
incomingString = Wire.read();
File SD_file = SD.open("log.txt", FILE_WRITE);
SD_file.print(incomingString);
Serial.println(incomingString);
SD_file.close();
} else {
if (SD.begin(CS_PIN)) {
failCounter++;
File SD_file = SD.open("log.txt", FILE_WRITE);
SD_file.println("SD Card Connection Fail: " + failCounter);
}
Serial.println("SD Card Connection Fail: " + failCounter);
SD_file.close();
}
} else {
if (SD.begin(CS_PIN)) {
failCounterCOM++;
File SD_file = SD.open("log.txt", FILE_WRITE);
SD_file.println("Master MCU COM fail: " + failCounterCOM);
}
Serial.println("Master MCU COM fail: " + failCounterCOM);
SD_file.close();
}
}
void setup() {
Serial.begin(115200);
Wire.begin(9);
pinMode(LED, OUTPUT);
pinMode(interruptPin, INPUT);
attachInterrupt(digitalPinToInterrupt(interruptPin), interruptServiceRoutine, RISING);
if (!SD.begin(CS_PIN))
Serial.println("Failed to connect to SD card");
}
问题是 incomingString = Wire.read();应该在 receiveEvent() 中;功能。您需要 Wire.onReceive 中的 those.And 之一。现在我的代码几乎更新为 -
void receiveEvent(int bytes){
incomingString = Wire.read();
}
void interruptServiceRoutine() {
if (Wire.available() > 0) {
if (SD.begin(CS_PIN)) {
failCounter = 0;
failCounterCOM = 0;
LED_Trigger = true;
File SD_file = SD.open("log.txt", FILE_WRITE);
SD_file.print(incomingString);
Serial.println(incomingString);
SD_file.close();
} else {
if (SD.begin(CS_PIN)) {
failCounter++;
File SD_file = SD.open("log.txt", FILE_WRITE);
SD_file.println("SD Card Connection Fail: " + failCounter);
}
Serial.println("SD Card Connection Fail: " + failCounter);
SD_file.close();
}
} else {
if (SD.begin(CS_PIN)) {
failCounterCOM++;
File SD_file = SD.open("log.txt", FILE_WRITE);
SD_file.println("Master MCU COM fail: " + failCounterCOM);
}
Serial.println("Master MCU COM fail: " + failCounterCOM);
SD_file.close();
}
}
void setup() {
Serial.begin(115200);
Wire.begin(9);
Wire.onReceive(receiveEvent);
pinMode(LED, OUTPUT);
pinMode(interruptPin, INPUT);
attachInterrupt(digitalPinToInterrupt(interruptPin), interruptServiceRoutine, RISING);
if (!SD.begin(CS_PIN))
Serial.println("Failed to connect to SD card");
}```