arduino讀取I2C總線上連接設(shè)備的地址
i2caddress 就像是你家中的地址, 每個(gè)slave都有自己的地址,由於線路上只有一個(gè)master,加上slave只可以向master通訊,所以master是不需地址的。
設(shè)定 i2c 地址,基本上是沒有限制的,只要同一線路上,沒有重復(fù)就可以了。
要設(shè)定slave板子的地址, 只需要執(zhí)行Wire.begin(《地址》); 而 master因?yàn)椴恍枰刂罚?只要Wire.begin()就可以了,。
以下是一個(gè) slave 設(shè)定的例子,把 slave板子的地址設(shè)定為 0x12,上載到slave板子上去執(zhí)行就可以了。
?。踦re lang=“arduino” line=“1”file=“slave_01.ino”]#include 《Wire.h》
#define SLAVE_ADDRESS 0x12
void setup() {
Wire.begin(SLAVE_ADDRESS); // join I2C bus as a slave with address 0x12
}
void loop() {
}[/code]
i2c地址掃瞄slave 建立後,就要看看 master 如果找到它了。
i2c scanner可以說是 master 板子的最基本例子,可以用作測(cè)試線路上連接了的設(shè)備的存在(只測(cè)試存在性,并非測(cè)試其功能)。
i2c_scanner 其實(shí)也很簡(jiǎn)單, 由 master 向所有地址發(fā)出 beginTransmission 再 endTransmission, 嘗試建立連線。 在 beignTransmission 中輸入 slave 的地址, 就可以測(cè)試該地址的裝置了。
如果error = 0(沒 error),即代表這個(gè)地址有設(shè)備登記
如果 rror = 4(這是 Wire 庫(kù)的設(shè)定,不要問我為什麼是 4),即代表這個(gè)地址可能有設(shè)備, 但有錯(cuò)誤。
否則,就代表該地址沒有設(shè)備使用了。
以下是一個(gè)簡(jiǎn)單的 i2c scanner 程式:
[pre lang=“arduino” line=“1” file=“i2c_scanner.ino”]#include 《Wire.h》
#define SERIAL_BAUD 57600
void setup()
{
Wire.begin();
Serial.begin(SERIAL_BAUD);
Serial.println(“I2C Scanner started”);
Serial.println();
}
void loop()
{
uint8_t error, i2cAddress, devCount, unCount;
Serial.println(“Scanning.。。”);
devCount = 0;
unCount = 0;
for(i2cAddress = 1; i2cAddress 《 127; i2cAddress++ )
{
Wire.beginTransmission(i2cAddress);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print(“I2C device found at 0x”);
if (i2cAddress《16) Serial.print(“0”);
Serial.println(i2cAddress,HEX);
devCount++;
}
else if (error==4)
{
Serial.print(“Unknow error at 0x”);
if (i2cAddress《16) Serial.print(“0”);
Serial.println(i2cAddress,HEX);
unCount++;
}
}
if (devCount + unCount == 0)
Serial.println(“No I2C devices found ”);
else {
Serial.print(devCount);
Serial.print(“ device(s) found”);
if (unCount 》 0) {
Serial.print(“, and unknown error in ”);
Serial.print(unCount);
Serial.print(“ address”);
}
Serial.println();
}
Serial.println();
delay(5000);
}
[/code]
在這個(gè)例子中, 應(yīng)該可以得到以下的結(jié)果:
I2C Scanner started
Scanning.。。
I2C device found at 0x12
1 device(s) found