我正在将Arduino Wire.h库用于i2c设备,但是,我不知道在任何给定时间(模块化)将使用多少个或哪个地址。假设有4位地址(地址0-15),如何发送命令到地址x,但是如果没有响应,则在一定时间后继续前进?这将需要不断地循环遍历每个地址,因为某些设备将在循环之间联机并脱机。
我考虑过使用一些中断时间。外部中断将不起作用,因为它必须快速且通用,并且可以处理其他代码。我不想太超时,因为我想给从设备足够的时间来响应,但是我也不想浪费时间等待。
void loop() {
// Cycle through all possible addresses
for (int i = 0; i <= 15; i++) {
// Request data from slave
Wire.requestFrom(i,1);
byte MasterReceive = Wire.read();
// Print data from slave
Serial.println("Master Received From Slave");
Serial.println(MasterReceive);
// Send data to slave
Wire.beginTransmission(i);
Wire.write(1);
Wire.endTransmission();
}
}
理想情况下,此代码将发送“ Wire.requestfrom”,如果尚未在10ms内完成,请跳至for循环中的下一项。 相反,这只是挂起,因为它永远不会得到响应。