arduino i2c的wire库使用求教
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arduino i2c的wire库使用求教相关的知识,希望对你有一定的参考价值。
在使用Wire.h函式库时,如看IC规格书时,装置位址格式中的最後的一个 bit(读/写位元) 我们必须忽略它(因为在使用Wire.h库函式时这个读/写位元的值它会自动帮你填上,虽然我们在写sketch代码时看不到)所以-我们要将 读/写位元 忽略它拿掉(楼主用的方式是将整个位址右移,或是直接用人脑除以2後答案填上 都行)後 一定会变成7个bit的装置位址,也符合I2C装置位址规范(0~127) 参考技术A 有例程的呀
arduino i2c的wire库使用求教
http://arduino.cc/en/Reference/Wire
开个 google 翻译,或者 必应翻译 最多1~2钟就能看懂.
给你一个 DS1307 的例子. 前提是DS1307 内已经有设好了时间.
#include <Wire.h>#define DS1307_I2C_ADDRESS 0x68
#define REG_SEC 0x00
#define REG_MIN 0x01
#define REG_HOUR 0x02
#define REG_DAY 0x03
#define REG_DATE 0x04
#define REG_MON 0x05
#define REG_YEAR 0x06
#define REG_CTL 0x07
#define REG_RAM_START 0x08
#define REG_RAM_END 0x3F
void setup()
Wire.begin(); // 开启 I2C 总线(主设备)
Serial.begin(9600);
void loop()
Wire.beginTransmission(DS1307_I2C_ADDRESS); // 开启发送
Wire.write(REG_SEC); // 写入 DS1307 秒地址
Wire.endTransmission(); // 结束发送
Wire.requestFrom(DS1307_I2C_ADDRESS, 1); // 请求 DS1307 一个字节
uint8_t s;
if(Wire.available() == 1) // 可否获取1个数据
s = bcd2dec(Wire.read() & 0x7F); // 读取 DS1307 秒
Serial.println(s);
delay(1000);
uint8_t dec2bcd(uint8_t dec)
return ((dec/10 * 16) + (dec % 10));
uint8_t bcd2dec(uint8_t bcd)
return ((bcd/16 * 10) + (bcd % 16));
参考技术A 关注这个问题
以上是关于arduino i2c的wire库使用求教的主要内容,如果未能解决你的问题,请参考以下文章
带有SoftWire(I2C仿真器)库的多个tcs34725 arduino颜色传感器
Arduino UNO+LCD1602+PCF8574转I2C驱动显示
Proteus仿真Arduino UNO+LCD1602+PCF8574转I2C驱动显示+DS1307