|
本帖最后由 Super169 于 2015-8-1 21:12 编辑
相关指令:
指令 | 发出者 | 作用 | Wire.begin([<address>]); | master / slave | 启动 Wire (由於 i2c 是用 Wire 的, 这就等同启动 i2c 了) | Wire.beginTransmission(<address>); | master | 开始对 <address> 的连线 | Wire.endTransmission(); | master | 关闭之前的连线 |
i2c 地址设定
i2c address 就像是你家中的地址, 每个 slave 都有自己的地址, 由於线路上只有一个 master, 加上 slave 只可以向 master 通讯, 所以 master 是不需地址的.
设定 i2c 地址, 基本上是没有限制的, 只要同一线路上, 没有重复就可以了.
要设定 slave 板子的地址, 只需要执行 Wire.begin(<地址>); 而 master 因为不需要地址, 只要 Wire.begin() 就可以了,.
以下是一个 slave 设定的例子, 把 slave 板子的地址设定为 0x12, 上载到 slave 板子上去执行就可以了.
[pre 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 板子的最基本例子, 可以用作测试线路上连接了的设备的存在 (只测试存在性, 并非测试其功能).
i2c_scanner 其实也很简单, 由 master 向所有地址发出 beginTransmission 再 endTransmission, 尝试建立连线. 在 beignTransmission 中输入 slave 的地址, 就可以测试该地址的装置了.
如果 error = 0 (没 error), 即代表这个地址有设备登记
如果 error = 4 (这是 Wire 库的设定, 不要问我为什麽是 4), 即代表这个地址可能有设备, 但有错误.
否则, 就代表该地址没有设备使用了.
以下是一个简单的 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\n");
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]
在这个例子中, 应该可以得到以下的结果: I2C Scanner started
Scanning...
I2C device found at 0x12
1 device(s) found
I2C Scanner 是非常有用的, 当你买了一个新装置, 如果送来的程式不成功, 先看看相关地址是否可找到装置, 可简单测试装置是否有问题.
相關程式下載:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|