最基本的功夫,今天可以坐下来做一个总结。
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()则返回已经存了多少个数据。
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()则返回已经存了多少个数据。
相关帖子
- • 菜鸟求助
- • 单片机+keil协调串口测试方法
- • STC15单片机+DS3231+DS18B20+DHT11+OLED12864+ESP8266_01S组成网络时间 有待改善
- • 基于单片机的自行车里程表程序 大写N到底是什么性质的变量 在哪里声明
- • proteus仿真时[SPICE] Too many iterations without converge...怎么处理?求指点
- • 可以用单片机制作320*96大规模的点阵吗?
- • 有人能帮我解释下这个单片机公交车自动报站红外模块的原理吗?
- • STC8A8A8K单片机+蓝牙+电机控制+遥控灯--资料和PCB程序源码
- • c语言定时器T0方式2控制led点亮时间1s 仿真led闪得很快
- • stm32按键点灯仿真无反应 求帮助