《Arduino程序设计基础》
作者:陈吕洲
出版社:北京航空航天大学出版社
出版时间:2014-1-1
ISBN:978-7-5124-1339-9
Arduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,更是硬件开发的趋势。Arduino简单的开发方式使得开发者更关注创意与实现,更快的完成自己的项目开发,大大节约了学习的成本,缩短了开发的周期。
因为Arduino的种种优势,越来越多的专业硬件开发者已经或开始使用Arduino来开发他们的项目、产品;越来越多的软件开发者使用Arduino进入硬件、物联网等开发领域;大学里,自动化、软件,甚至艺术专业,也纷纷开展了Arduino相关课程。
笔者2008年开始接触Arduino,被Arduino的简单易用所吸引,后创建ArduinoCN中文社区,致力于Arduino教学与推广。现从事硬件开发工作,在工作中也经常使用Arduino做开发,积累了一定经验。
本书即是笔者将过去撰写的Arduino相关教程与自身开发经验整理而成,主要针对大学Arduino教学实验编写,亦可用于相关开发人员及爱好者入门学习。
本书体系结构清晰,内容丰富,涵盖Arduino基础知识及高级应用,中途穿插简单项目制作,用于巩固知识与扩展提高,同时提供了常用API参考,方便读者实践时查阅。
各章节所涉及内容如下:
第1章简单介绍Arduino历史、软硬件及安装使用方法;
第2章讲解语言基础、基本输入输出方法、串口通信与一些常用函数的使用;
第3章讲解Arduino I/O口的一些高级应用;
第4章详细讲解如何使用和编写Arduino类库;
第5章介绍串口、IIC、SPI 三种通信方式在Arduino上的使用方法;
第6章介绍了如何使用EEPROM和SD卡记录保持数据;
第7章讲解Arduino红外通信的使用方法;
第8章以1602和12864两种常见液晶显示器为例,介绍了Arduino驱动液晶显示器的方法。
第9章是针对特殊型号的Arduino控制器(Leonardo、Micro、Due等)的USB功能进行讲解。
第10章讲解了Arduino进行网络通信库的使用方法。
第11章为附录,介绍了使用Visual Studio开发Arduino的方法及一些常见问题的处理方式,并附带了一些控制器手册和相关配置表格,方便读者查阅。
掌握前三章,你便基本了解了Arduino的开发方法,可以完成不少小型项目开发。第4章以后为进阶教程,讲解了Arduino的一些常用类库的使用。如果是大学教学使用,按章节顺序循序渐进即可,教师亦可以设计一些小型项目用于学生实践练习;如果你有一定软硬件开发基础,则可根据你的实际项目要求,直接阅读相应章节。
感谢以下网友对我写作本书提供的帮助:大茶园丁、kiwi、ZZZ、奔跑、珜羽、海神、三水。特别感谢潘拥军先生的悉心检查与耐心指导。
由于笔者水平有限,书中难免存在不足与错误之处,敬请读者批评指正。你可以通过ArduinoCN中文社区(http://www.arduino.cn)参与本书相关内容的讨论,亦可以直接与我联系,我的新浪微博:http://weibo.com/coloz。
第1章 初识Arduino. 1
1.1 什么是Arduino?… 1
1.2 Arduino的由来… 3
1.3 为什么使用Arduino做开发平台… 4
1.4 Arduino硬件——选择一款适合你的Arduino控制器… 6
1.4.1 认识不同型号的Arduino控制器… 6
1.4.2 众多的Arduino外围模块… 10
1.4.3 从Arduino UNO开始… 12
1.5 Arduino软件… 15
1.5.1 下载配置Arduino开发环境… 15
1.5.2 认识Arduino IDE. 15
1.5.3 安装Arduino驱动程序… 18
1.6 Blink——Arduino的Hello world!… 21
第2章 基础篇… 26
2.1 Arduino语言… 26
2.1.1 Arduino程序结构… 26
2.2 C\C++语言基础… 27
2.2.1 数据类型… 27
2.2.2 运算符与表达式… 29
2.2.3 表达式… 29
2.2.4 数组… 29
2.2.5 字符串… 30
2.2.6 注释… 30
2.2.7 用流程图来表示你的程序… 31
2.2.8 顺序结构… 31
2.2.9 选择结构… 31
2.2.10 循环结构… 34
2.3 电子元件和Arduino扩展模块… 37
2.4 传感器扩展板的使用… 40
2.5 Arduino I/O的简单控制… 41
2.5.1 数字I/O的使用… 41
2.5.2 项目:人体感应灯(数字传感器与继电器模块)… 53
2.5.3 模拟I/O的使用… 57
2.5.4 项目:电子温度计… 66
2.5.5 数字传感器与模拟传感器的使用… 69
2.6 与计算机交流——串口的使用… 72
2.6.1 串口输出… 72
2.6.2 串口输入… 73
2.6.3 实验:串口控制开关灯… 76
2.7 时间控制函数… 77
2.7.1 运行时间函数… 77
2.7.2 延时函数… 78
第3章 I/O口高级应用… 79
3.1 调声函数… 79
3.1.1 蜂鸣器发声… 80
3.2 项目:简易电子琴… 83
3.3 脉冲宽度测量函数… 85
3.3.1 超声波测距… 85
3.4 设置ADC参考电压… 89
3.5 外部中断… 90
3.5.1 外部中断的使用… 90
3.5.2 实验:外部中断触发蜂鸣器警报… 92
第4章 使用和编写类库… 94
4.1 编写并使用函数,提高程序的可读性… 94
4.2 使用Arduino类库… 96
4.3 编写Arduino类库… 100
4.3.1 编写头文件… 100
4.3.2 预处理命令… 101
4.3.3 宏定义… 102
4.3.4 文件包含… 102
4.3.5 条件编译… 102
4.3.6 版本兼容… 102
4.3.7 编写.cpp文件… 103
4.3.8 关键字高亮显示… 104
4.3.9 建立示例程序… 105
4.4 类库优化与发布… 106
第5章 通信篇… 107
5.1 硬件串口通信——HardwareSerial的使用… 107
5.1.1 HardwareSerial类成员函数… 110
5.1.2 print和write输出方式的差异… 114
5.1.3 read和peek输入方式的差异… 116
5.1.4 串口读取字符串… 118
5.1.5 串口事件… 120
5.1.6 实验:串口控制RGB LED调光… 122
5.1.7 更好的串口监视器——串口调试助手… 125
5.2 软件模拟串口通信——SoftwareSerial库的使用… 126
5.2.1 SoftwareSerial库的局限性… 126
5.2.2 SoftwareSerial类成员函数… 126
5.2.3 建立一个软串口通信… 127
5.2.4 实验:Arduino间的串口通信… 128
5.2.5 同时使用多个软串口… 132
5.3 IIC总线的使用——Wire库的使用… 133
5.3.1 IIC主机、从机与引脚… 133
5.3.2 Wire类库成员函数… 134
5.3.3 IIC连接方法… 137
5.3.4 主机写数据,从机接收数据… 138
5.3.5 从机发送数据,主机读取数据… 140
SPI库的使用… 144
5.3.6 SPI引脚… 144
5.3.7 SPI总线上的从设备选择… 145
5.3.8 SPI类库的成员函数… 145
5.3.9 SPI总线上的数据发送与接收… 147
5.3.10 实验:使用数字电位器AD5206. 147
5.3.11 软件模拟SPI通信… 151
5.3.12 实验:使用74HC595扩展I/O口… 152
第6章 存储篇… 157
6.1 断电也能保存数据——EEPROM库的使用… 157
6.1.1 EEPROM类的成员函数… 157
6.1.2 写入操作… 158
6.1.3 读取操作… 159
6.1.4 清除操作… 160
6.1.5 使用共用体存储各类型数据到EEPROM.. 161
SD卡库的使用… 164
6.1.6 格式化SD卡… 164
6.1.7 SD库的成员函数… 165
6.1.8 使用SD卡读写模块… 171
6.1.9 创建文件… 172
6.1.10 删除文件… 174
6.1.11 写文件… 176
6.1.12 读文件… 178
6.2 项目:SD卡环境数据记录器… 181
6.2.1 DHT11温湿度检测模块的使用… 181
6.2.2 硬件连接方法… 182
6.2.3 温湿度记录器… 184
6.2.4 在Excel中分析数据… 187
第7章 无线通信篇… 191
7.1 红外遥控… 191
7.1.1 IRremote库成员函数… 192
7.1.2 红外接收… 195
7.1.3 红外发射… 198
7.1.4 实验:遥控家电设备… 199
第8章 LCD显示篇… 204
8.1 1602 LCD的使用(LiquidCrystal类库的使用)… 204
8.1.1 将1602 LCD连接到Arduino. 204
8.1.2 4位数据线接法… 205
8.1.3 1602 LCD相关参数… 207
8.1.4 LiquidCrystal类的成员函数… 207
8.1.5 实验:HelloWorld. 212
8.1.6 实验:将串口输入数据显示到1602 LCD上… 214
8.1.7 实验:显示滚动效果… 215
8.1.8 实验:显示自定义字符… 217
8.2 项目:制作电子时钟… 221
8.2.1 DS1307时钟模块的使用… 221
8.2.2 电子时钟… 227
8.3 图形显示器的使用——u8glib的使用… 230
8.3.1 选择LCD并连接到Arduino. 230
8.3.2 连接到Arduino并建立u8g对象… 231
8.3.3 u8glib程序结构… 232
8.3.4 纯文本显示… 232
8.3.5 数据显示… 234
8.3.6 实验:绘制图形… 235
8.3.7 实验:显示图片… 238
第9章 USB库的使用… 241
9.1 USB设备模拟相关函数… 241
9.1.1 USB鼠标类的成员函数… 241
9.1.2 USB键盘类的成员函数… 243
9.2 模拟键盘输入信息… 246
9.2.1 Arduino Leonardo在模拟USB设备后,无法正常下载程序。… 247
9.2.2 模拟键盘组合按键… 248
9.2.3 实验:使用摇杆模块控制计算机鼠标… 250
9.2.4 项目:PPT播放遥控器… 254
第10章 Ethernet库的使用… 257
10.1 Ethernet相关硬件介绍… 257
10.2 Ethernet库… 260
10.2.1 Ethernet 类… 260
10.2.2 IPAddress 类… 261
10.2.3 EthernetServer类… 262
10.2.4 EthernetClient类… 263
10.3 Ethernet的初始化… 266
10.3.1 自定义IP地址… 266
10.3.2 DHCP获取IP地址… 267
10.4 通过Telnet建立简易聊天室… 268
10.4.1 建立Arduino Telnet聊天服务器… 268
10.4.2 Windows Telnet客户端的使用… 270
10.5 Ethernet与Web应用… 272
10.5.1 HTTP协议简介… 272
10.5.2 HTTP响应… 274
10.5.3 网页客户端… 275
10.5.4 网页服务器… 277
10.6 UDP通信… 280
10.6.1 EthernetUDP类… 280
10.6.2 使用UDP收发数据… 282
10.7 项目:网页控制Arduino. 284
第11章 附录… 291
11.1 使用专业IDE编写Arduino项目… 291
11.2 常见问题及解决方法… 294
11.2.1 驱动无法正常安装… 294
11.2.2 下载程序时提示avrdude: stk500_getsync(): not in sync: resp=0x00. 297
11.2.3 使用第三方类库时编译出错,提示WProgram.h: No such file or directory:… 297
11.2.4 能否使用AVRGCC的方法在Arduino IDE中开发Arduino?… 298
11.2.5 Arduino是否支持其他型号的芯片?… 298
11.2.6 Arduino开源使用的协议是什么?… 298
11.2.7 能否使用AVR-Libc、汇编等开发Arduino?… 298
11.3 Arduino Leonardo手册… 299
11.4 Arduino DUE手册… 303
l 11.5 ASCII码对照表… 308
11.6 串口通信可用config配置… 312
11.7 USB键盘库支持的键盘功能按键列表… 313
参考文献… 315
OpenJumper创始人、MostFun创始人、资深Arduino玩家。