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

arduino 中#include<wire.h>是啥作用,干啥的

Arduino-IIC-Wire.h

在Arduino中缺少Wiring.h