空通道上的Arduino I2C超时

时间:2019-05-09 14:24:06

标签: arduino i2c arduino-c++

我正在将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循环中的下一项。 相反,这只是挂起,因为它永远不会得到响应。

0 个答案:

没有答案