Arduino开发手册(arduino开发从零开始学)

http://www.itjxue.com  2023-03-26 05:01  来源:未知  点击次数: 

《Arduino开发实战指南》pdf下载在线阅读全文,求百度网盘云资源

《Arduino开发实战指南》百度网盘pdf最新全集下载:

链接:

?pwd=rdpw 提取码: rdpw

简介:Arduino是一个注重实际动手操作的产品,所以本书以实际应用为纽带将各个章节联系起来,首先介绍Arduino的一些基础知识,接着针对具体应用介绍了一些扩展板以及Arduino扩展库,最后应用之前的内容完成了具有视频监控功能的履带车、遥控机械臂以及双足机器人的制作。 ?

Arduino--开发板简介(一)

网址:

??Arduino来自意大利,是全球领先的开源软硬件平台,为全世界数以百万计的开发者提供帮助,简单、快速的实现开发项目。Arduino本质上是一种电子工具,它可以被用来制作许多有趣的创意电子制作,比如电子时钟、四轴飞行器、宠物喂食机、3D打印机、电子显微镜等。全世界的电子爱好者们还在不断开发基于Arduino的创意电子制作。

中间两排引脚用于插NANO板。

NANO板:

Arduino Nano是一款基于ATmega328P(Arduino Nano 3.x)的小型,完整且面包板友好型主板。 它具有或多或少与Arduino Duemilanove相同的功能,但在不同的包装中。 它只缺少直流电源插孔,可以使用Mini-B USB电缆而不是标准电缆。

Arduino IIC协议笔记

他由3根线组成分别叫SDA,SCL,GND,SDA为数据线,SCL为时钟线,GND为参考电平,就是0电平

通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平

I2C总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址**(可以从I2C器件的数据手册得知),主从设备之间就通过这个地址来确定与哪个器件进行通信,在通常的应用中,我们把CPU带I2C总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。

I2C总线上的主设备与从设备之间 以字节(8位)为单位 进行双向的数据传输

总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件

数据的传输

主设备在传输有效数据之前要先指定从设备的地址,地址指定的过程和上面数据传输的过程一样,只不过大多数从设备的地址是7位的,然后协议规定再给地址添加一个最低位用来表示接下来数据传输的方向,0表示主设备向从设备写数据,1表示主设备向从设备读数据

第一,主设备往从设备中写数据。数据传输格式如下:

第二,主设备从从设备中读数据。数据传输格式如下:

第三,主设备往从设备中写数据,然后重启起始条件,紧接着从从设备中读取数据;或者是主设备从从设备中读数据,然后重启起始条件,紧接着主设备往从设备中写数据。数据传输格式如下:

第三种操作在单个主设备系统中,重复的开启起始条件机制要比用STOP终止传输后又再次开启总线更有效率。

Arduino的IIC通信使用wire库,该库包含以下方法:

begin()

requestFrom()

beginTransmission()

endTransmission()

write()

available()

read()

onReceive()

onRequest()

Wire.begin() 建立连接

(1)要在 setup( ) 内用Wire.begin( ) 加入 IIC 通讯

(A)Master 只要这样Wire.begin( );

(B)Slave 要用一个 1 到 127 的整数当作参数, 代表 Slave 的address,

例如

Wire.begin(2); // 我是2 号地址

(2)要由 Master 下命令要求Slave 送数据过来,

例如:

Wire.requestFrom(2,6); // 要求 2号透过Wire 送 6 个char 过来

但是, 请注意, 这里的 6 其实只是一个byte 的命令, 只是"希望"从机送 6 byte (最多只可要求32 byte)

这里的 6 到底是啥意思是由Master 和 Slave 的程序设计者自己约定好即可

Wire.requestFrom(); 只是送个命令(一个 byte)给某个Slave,

然后等着,直到至少一个char 送过来或 time out 才会往下做下一行

所以, 这时 Master 在这句下方要用Wire.read( ) 读取数据

Wire.requestFrom(); 会回传一个整数, intkkk = Wire.requestFrom(2, 6);

然后检查实际收到几个 byte 的kkk 是否为 0, 是表示 timeout 都没收到任何 byte

(3) Slave 应该如何响应主人Master的命令

官网的范例不管 Master 送过来是啥, 直接用 requestEvent() 函数送回6 bytes

比较正确的方法应该是:

(A) Master 在下达命令.requestFrom(从机地址, 几byte); 之前:

(B)在Slave 这边相对应于 (A)Master 的动作如下:

(C)在 Master 这边于.requestFrom( ); 之后用 while 检查Wire.available( ) 并用 Wire.read( ) 接收数据

(责任编辑:IT教学网)

更多