arduino使用I2C接口与模块相连时调试分析

1、概述      
        当我们使用Arduino连接一些I2C接口的模块时,有时候程序运行后没有反应,首先我们就需要检查硬件已经连线是否有问题,如果在确认硬件没有问题的情况下,程序还是没有反应这时候我们就需要来查看软件是否有问题了,然而很多时候,在查看软件代码完后还是检测不出问题所在。其实我们容易忽略的一个问题是关于I2C地址的问题,我在做一些项目的过程中就遇到过很多因为I2C地址的问题使得调试花费了很多时间。因此这里提供一个简答有效的方法来解决此问题,从而提供工作的效率,原理很简单:通过扫描I2C地址的方法从而得到模块的正确的I2C地址,从而排除由于i2c地址的问题所造成的程序无反应的情况。
2、连线
将arduino开发板和传感器模块的I2C接口、电源、地已经其他必要的引脚相连接。
3、代码


																		
#include <Wire.h>

void setup()

{

Wire.begin();

Serial.begin(9600);

Serial.println("\nI2C Scanner");

}

void loop()

{

byte error, address;

int nDevices;

Serial.println("Scanning...");

nDevices = 0;

for(address = 1; address < 127; address++ )

{

//使用返回值来判断设备是否在该地址时有回应信号

Wire.beginTransmission(address);

error = Wire.endTransmission();

if (error == 0)

{

Serial.print("I2C device found at address 0x");

if (address<16)

Serial.print("0");

Serial.print(address,HEX);

Serial.println(" !");

nDevices++;

}

else if (error==4)

{

Serial.print("Unknow error at address 0x");

if (address<16)

Serial.print("0");

Serial.println(address,HEX);

}

}

if (nDevices == 0)

Serial.println("No I2C devices found\n");

else

Serial.println("done\n");

delay(5000); // 等待 5s 后继续扫描

}
																		

4、结果
将代码上传到arduino开发板,打开串口监视器,如果没问题,就可以在串口监视器中看到检测出的模块正确的I2C地址。