[心得] 使用Arduino 扫描I2C装置的位址

2020-05-26|浏览量:244|点赞:154

#Arduino #Arduino UNO #Arduino MEGA2560 #Arduino DUE #I2C #IIC #I2C LCD #1602 LCD #LCD

这裏我先用一张图来解释Arduino 专案的发展需要的工具
[心得] 使用Arduino 扫描I2C装置的位址
我们常常到购物网买一些Arduino的sensor。。。由于Sensor 百花齐放,做的人没有提供资料,卖的人也不清楚,技术资料转来转去,大家一片混乱,拿I2C界面LCD来讲,明明範例的位置是0x27,但是我们照着写就是动不了,差半天才知道LCD模组的位置不同,现在我就提供大家一个方法I2C address Scan 程式有了它就不用再伤脑了。

[心得] 使用Arduino 扫描I2C装置的位址
完整的程式码如下:

// I2C Scanner
// Written by Nick Gammon http://gammon.com.au/i2c
// Date: 20th April 2011
// 2016-09-30
//中文注解李进卫
//IIC 位址扫描程式
//适用于Arduino UNO,DUE,MEGA2560
// 技术参考网址 http://playground.arduino.cc/Main/I2cScanner
// 作者网址(他有详细说明I2C通信格式与原理) : http://gammon.com.au/i2c

#include

void setup() {
Serial.begin (115200);

// Leonardo: wait for serial port to connect
while (!Serial)
{
}

Serial.println ();
Serial.println ("I2C scanner. Scanning ...");
byte count = 0;

Wire.begin();
for (byte i = 8; i < 120; i++) //地址扫描
{
Wire.beginTransmission (i);//对装置发出I2C位址函数解释请参考: https://www.arduino.cc/en/Reference/WireBeginTransmission
if (Wire.endTransmission () == 0) //假如装置有ACK 就显示其位址资讯藉由RS232传送出来
// 函数解释请参考: https://www.arduino.cc/en/Reference/WireEndTransmission
{
Serial.print ("Found address: ");
Serial.print (i, DEC);
Serial.print (" (0x");
Serial.print (i, HEX);
Serial.println (")");
count++;
delay (1);// maybe unneeded?
} // end of good response
} // end of for loop
Serial.println ("Done.");
Serial.print ("Found ");
Serial.print (count, DEC);
Serial.println (" device(s).");
}// end of setup

void loop() {}

上一篇: 下一篇:

相关推荐