3

我为 Arduino 编写了一个类,它读取HiTechnic LEGO Mindstorms 罗盘传感器的罗盘数据。

使用 Wire 库,我可以很好地从各个寄存器中获取数据。在我的 Arduino 库中,我解决了0x01某人已经在 Arduino 论坛上使用的传感器。但是在网络上的其他任何地方(LEGO Mindstorms 的 RobotC-forums在本文档最底部的代码示例中)它都说,该传感器的 I2C 地址是0x02

那么为什么我必须使用该地址0x01才能与我的传感器进行通信,而它似乎是0x02用于其他编程语言的呢?

4

1 回答 1

4

I2C 地址有不同的格式 - 7 位或 8 位。Arduino 使用 7 位格式,因此要将 8 位地址转换为 7 位,只需将其右移一位即可。这就是 0x02 8 位地址转换为 0x01 7 位地址的方式。

资料来源:http ://arduino.cc/en/reference/wire

“注意:I2C 地址有 7 位和 8 位版本。7 位标识设备,第 8 位确定它是被写入还是读取。Wire 库始终使用 7 位地址。如果您有使用 8 位地址的数据表或示例代码,您需要删除低位(即将值向右移动一位),产生一个介于 0 和 127 之间的地址。”

于 2013-07-29T13:10:34.517 回答