图书目录

目录

入门篇

第1章引言

1.1认识Arduino

1.1.1Arduino的“前世今生”

1.1.2Arduino核心板系列

1.1.3Arduino IDE

1.1.4Bootloader工作原理

1.2实战11: 揭秘Nano核心板

1.2.1问题和目标

1.2.2解决方案

1.3基于Arduino的电子系统设计

1.3.1系统设计流程

1.3.2采用面包板的样机制作方法

1.4Arduino和MATLAB的协同系统设计

1.4.1协同系统特色优势

1.4.2协同系统设计方案

本章小结

拓展练习

第2章体验Arduino

2.1实战21: 从Nano向PC发送数据

2.1.1问题和目标

2.1.2解决方案

2.1.3扩展讨论

2.2实战22: Serial的实现代码

2.2.1问题和目标

2.2.2解决方案

2.2.3扩展讨论

2.3实战23: 隐藏的main()函数

2.3.1问题和目标

2.3.2解决方案

2.3.3扩展讨论

2.4实战24: 用Nano烧写Bootloader

2.4.1问题和目标

2.4.2解决方案

2.4.3扩展讨论

2.5IDE编程的特点

本章小结

拓展练习

基础篇

第3章Arduino程序设计基础

3.1Arduino编程简介

3.2Arduino常用数据类型

3.2.1浮点数精度的问题

3.2.2变量作用域

3.3Arduino中的运算

3.3.1算术运算符

3.3.2关系运算符

3.3.3位运算符

3.3.4逻辑运算符

3.3.5赋值运算符

3.3.6限制取值范围

3.3.7取整

3.3.8三角函数

3.3.9随机数

3.4Arduino的循环语句

3.4.1while循环

3.4.2do…while循环

3.4.3for循环

3.4.4循环的跳出

3.5Arduino的条件判断语句

3.5.1if语句

3.5.2switch case语句

3.6Arduino数组与字符串

3.6.1Arduino中的数组

3.6.2Arduino中的字符串

3.6.3字符串的常用操作

3.7String及其成员函数

3.8Arduino中的函数

本章小结

拓展练习

第4章数字引脚资源应用设计

4.1Nano的数字引脚资源

4.2实战41: 用pinMode()和digitalWrite()函数点亮板载LED 

4.2.1问题和目标

4.2.2解决方案

4.2.3扩展讨论

4.3实战42: 用digitalRead()函数读取拨码开关输入后控制板载LED

4.3.1问题和目标

4.3.2解决方案

4.3.3扩展讨论

4.4实战43: 用引脚寄存器读取多拨码开关输入后控制板载LED

4.4.1问题和目标

4.4.2解决方案

4.4.3扩展讨论

4.5实战44: 验证引脚上拉电阻的抗干扰作用

4.5.1问题和目标

4.5.2解决方案

4.5.3扩展讨论

4.6实战45: 用analogWrite()函数产生PWM波形使LED亮度渐变

4.6.1问题和目标

4.6.2解决方案

4.6.3扩展讨论

本章小结

拓展练习

第5章计时资源应用设计

5.1Nano的延时控制与时间测量

5.2实战51: 用delay()函数产生阻塞指定长度延时

5.2.1问题和目标

5.2.2解决方案

5.2.3扩展讨论

5.3实战52: 用while循环产生阻塞条件判断延时

5.3.1问题和目标

5.3.2解决方案

5.3.3扩展讨论

5.4实战53: 用millis()或micros()函数实现计时功能

5.4.1问题和目标

5.4.2解决方案

5.4.3扩展讨论

5.5实战54: 用pulseIn()函数测量脉冲宽度

5.5.1问题和目标

5.5.2解决方案

5.5.3扩展讨论

本章小结

拓展练习

第6章模拟信号测量应用设计

6.1Nano自带的模拟信号采集资源

6.2实战61: 用analogRead()函数测量模拟电压

6.2.1问题和目标

6.2.2解决方案

6.2.3扩展讨论

6.3实战62: 使用analogReference()函数提高模拟测量精度

6.3.1问题和目标

6.3.2解决方案

6.3.3扩展讨论

6.4实战63: 使用外部基准源提高模拟测量精度

6.4.1问题和目标

6.4.2解决方案

6.4.3扩展讨论

6.5实战64: 测量analogRead()函数的采样频率

6.5.1问题和目标

6.5.2解决方案

6.5.3扩展讨论

6.6实战65: 提高analogRead()函数的采样频率

6.6.1问题和目标

6.6.2解决方案

6.6.3扩展讨论

6.7实战66: 用串口绘图器观察模数采集信号

6.7.1问题和目标

6.7.2解决方案

6.7.3扩展讨论

6.8实战67: 用DSA模块测量双极性模拟信号

6.8.1问题和目标

6.8.2解决方案

6.8.3扩展讨论

本章小结

拓展练习

第7章I2C和SPI通信资源应用设计

7.1Nano引脚的I2C和SPI通信功能

7.2I2C协议原理

7.3实战71: 用Wire库实现I2C通信

7.3.1问题和目标

7.3.2解决方案

7.3.3扩展讨论

7.4SPI协议原理

7.5实战72: 用SPI库实现SPI通信

7.5.1问题和目标

7.5.2解决方案

7.5.3扩展讨论

本章小结

拓展练习

第8章自带与外扩存储资源的设计

8.1Arduino的数据存储资源

8.2实战81: 用内置EEPROM存储数据

8.2.1问题和目标

8.2.2解决方案

8.2.3扩展讨论

8.3实战82: 用外部EEPROM存储数据

8.3.1问题和目标

8.3.2解决方案

8.3.3扩展讨论

8.4实战83: 用外部SD卡存储数据

8.4.1问题和目标

8.4.2解决方案

8.4.3扩展讨论

本章小结

拓展练习

第9章外扩模拟信号输出的设计

9.1模拟信号输出概述

9.2实战91: 用面包板扩展DA功能

9.2.1问题和目标

9.2.2解决方案

9.2.3扩展讨论

9.3实战92: 用DAR模块实现DA功能

9.3.1问题和目标

9.3.2解决方案

9.3.3扩展讨论

9.4实战93: 用TI902实现并行DA功能

9.4.1问题和目标

9.4.2解决方案

9.4.3扩展讨论

9.5实战94: 用PCF8591实现串行DA功能

9.5.1问题和目标

9.5.2解决方案

9.5.3扩展讨论

本章小结

拓展练习

综合篇

第10章Arduino与PC协同设计

10.1Arduino与PC协同的UART通信功能

10.2实战101: 用Serial.println()函数向PC发送文本信息

10.2.1问题和目标

10.2.2解决方案

10.2.3扩展讨论

10.3实战102: 用Serial.println()函数向PC发送字符编码数据

10.3.1问题和目标

10.3.2解决方案

10.3.3扩展讨论

10.4实战103: 用Serial.write()函数向PC发送二进制数据

10.4.1问题和目标

10.4.2解决方案

10.4.3扩展讨论

10.5实战104: 用Serial.available()和Serial.read()函数阻塞式接收

PC发送的字符

10.5.1问题和目标

10.5.2解决方案

10.5.3扩展讨论

10.6实战105: 串口高级读取功能

10.6.1问题和目标

10.6.2解决方案

10.6.3扩展讨论

10.7实战106: 用serialEvent()函数并发式接收PC发送的数据

10.7.1问题和目标

10.7.2解决方案

10.7.3扩展讨论

10.8实战107: 用SoftwareSerial实现软串口通信

10.8.1问题和目标

10.8.2解决方案

10.8.3扩展讨论

本章小结

拓展练习

第11章MATLAB与Arduino协同设计

11.1MATLAB的通信协同功能

11.1.1串口通信设计需考虑的关键问题

11.1.2MATLAB的串口对象与属性

11.2实战111: 创建MATLAB串口对象并配置属性

11.2.1问题和目标

11.2.2解决方案

11.2.3扩展讨论

11.3MATLAB串口发数据机制

11.4实战112: MATLAB向Arduino发送字符命令

11.4.1问题和目标

11.4.2解决方案

11.4.3扩展讨论

11.5实战113: MATLAB向Arduino发送二进制数据

11.5.1问题和目标

11.5.2解决方案

11.5.3扩展讨论

11.6MATLAB串口读数据机制

11.7实战114: MATLAB同步读Arduino发送字符编码数据

11.7.1问题和目标

11.7.2解决方案

11.7.3扩展讨论

11.8实战115: MATLAB同步读Arduino发送的二进制数据帧

11.8.1问题和目标

11.8.2解决方案

11.8.3扩展讨论

11.9MATLAB串口的相关事件和回调函数

11.9.1事件类型和回调属性

11.9.2创建和执行回调函数

11.10实战116: 用MATLAB串口异步读取Arduino发送的数据

11.10.1问题和目标

11.10.2解决方案

11.10.3扩展讨论

本章小结

拓展练习

第12章Arduino实现快速傅里叶变换

12.1问题和目标

12.2原理思路

12.2.1复数的表示

12.2.2FFT经典蝶形运算

12.3解决方案

12.4测试验证

12.5扩展讨论

12.5.1Arduino自带pow()函数的易错点

12.5.2Arduino内存的局限性

本章小结

拓展练习

第13章简约型红外通信链路设计

13.1问题和目标

13.2原理思路

13.2.1发射机设计

13.2.2接收机设计

13.3解决方案

13.4测试验证

13.5扩展讨论

本章小结

拓展练习

第14章Arduino与MATLAB协同的超声雷达设计

14.1问题和目标

14.2系统整体设计方案

14.3系统硬件设计实现

14.3.1超声雷达传感器

14.3.2舵机云台模块

14.3.3声音传感器

14.3.4集成硬件样机

14.4系统软件设计实现

14.4.1Arduino软件设计

14.4.2MATLAB软件设计

本章小结

拓展练习

参考文献