【发布时间】:2021-03-22 13:55:39
【问题描述】:
我正在尝试让两个 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");
}
【问题讨论】:
-
接收器是否在 I2C 地址 9 上,是否配置为从设备?
-
是的,你可以在代码中自己看到。
-
我在代码中看不到地址是否正确。
-
在接收器的设置函数中我说的是 Wire.begin(9)
标签: c++ arduino communication i2c