找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 21969|回复: 2
打印 上一主题 下一主题
收起左侧

ARDUINO的I2C通信详解

[复制链接]
跳转到指定楼层
楼主
ID:91350 发表于 2015-10-30 11:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        最基本的功夫,今天可以坐下来做一个总结。
        I2C
是非常普通的通信方式,Arduino单片机集成了I2C库,可以直接调用几个函数实现I2C通信。Arduino MEGA2560开发板I2C接口,在班上对应的20--SDA 21--SCL。





                                                                                       图1


        Arduino的I2C库是Wire.h。常用库函数如下:
        Wire.beginTransmission(Addr);
        Wire.write(data);
        Wire.endTransmission(void);

        Wire.requestFrom(Addr, num);
        Wire.available();
        Wire.read()。
        每个数据发出后,都必须有应答,只有在等到应答后,才能发出下一个数据或者指令。
        下面是一段代码:
        
Wire.beginTransmission(0x01);
        Wire.write(0xAA);
        如果0x01发出后I2C器件没有应答,那么0xAA就不能发送,这时候用示波器或者逻辑分析仪看,就只能看到发出了Start信号和数据0x01。
        Wire.beginTransmission(Addr)只发送起始信号和I2C地址,Addr是I2C总线地址。
        Wire.write(data)只发送数据,data就是希望发送的数据,而且是发一次,地址就自动加一。
        Wire.endTransmission(void)发送停止信号。
        Wire.requestFrom(Addr, num)向已知地址器件获取连续num个数据,这时候需要注意,数据只是存起来了,并没有真正返回。
        Wire.read()就是用来读回前面那些存起来的数据,而且是读一次地址自动加一。
        Wire.available()则返回已经存了多少个数据。





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:403361 发表于 2018-12-10 14:33 | 只看该作者
能不能发送double类型或者float类型的数据,write只能发送byte类型的数据
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表