本书是美国O'Reilly公司出版的Arduino方面专业手册《Arduino Cookbook》的中文版。
本书由浅入深地介绍了Arduino的基础知识和应用项目,不要求软件和硬件的相关经验。
作者Michael Margolis,是Arduino语言库和核心软件的编写者之一,现任Avaya首席技术总监,曾在索尼、微软、朗讯/贝尔实验室工作,拥有30多年的相关经验,曾著《学Arduino玩转机器人制作》。
译者杨昆云,在美国俄亥俄州立大学获得生物物理学博士学位,随后在加州理工大学做博士后研究,现旅居美国。现任百度贴吧Arduino吧的吧主。
本书Arduino Cookbook)是关于Arduino的基础知识和应用的入门手册,从基本概念、常见任务到高级技术,本书应有尽有。前4章介绍简单的入门知识,使你初步认识Arduino并与计算机和其他设备进行通信。5~9章针对输入和输出进行细致讲解。第10章开始介绍高级编程和技术应用。本书将通过200个常见的实例来帮助你在实践中成为Arduino的使用高手。本书的讲解细致,不需要有软件和硬件的经验,通过这本书,可以利用计算机技术和环境互动找到快速解决硬件、软件问题的方法。有经验的程序员也可以在本书中得到试用底层的AVR资源构建使用Arduino环境的应用。
第1章入门…1
1.0 介绍……………………1
1.1 安装集成开发环境(IDE)………………………3
1.2 设置Arduino板………5
1.3 使用集成开发环境(IDE)准备一个Arduino程序………………………7
1.4上传并运行闪烁素描……………………………8
1.5创建并保存程序………9
1.6使用Arduino…………11
第2章让程序为你工作……………15
2.0介绍…………………15
2.1构建一个Arduino程序………………………15
2.2使用简单的原始类型(变量)………………17
2.3使用浮点数…………18
2.4使用一组数值………20
2.5使用Arduino的String功能…………………22
2.6使用C字符串………26
2.7把逗号分隔的文本拆分成组…………………27
2.8把一个数字转换为字符串……………………29
2.9将字符串转换为数字31
2.10将你的代码划分为多个功能块………………34
2.11从函数返回多个值…38
2.12根据条件采取行动…40
2.13重复一个语句序列…42
2.14使用计数器重复执行语句……………………44
2.15跳出循环……………46
2.16基于单个变量进行不同的操作………………47
2.17字符和数量值的比较49
2.18字符串的比较………51
2.19逻辑比较的操作……52
2.20执行位运算…………53
2.21复合运算和赋值……55
第3章使用数学运算符……………56
3.0介绍…………………56
3.1加,减,乘,除……56
3.2值的递增和递减……57
3.3找出两个值相除的余数………………………58
3.4确定绝对值…………59
3.5把一个数约束在一个数值范围内 ……………59
3.6寻找一些值的最小或最大值…………………60
3.7计算一个数的乘方…61
3.8取平方根……………61
3.9浮点数向上和向下取整………………………62
3.10使用三角函数………63
3.11生成随机数…………63
3.12设置和读取位………66
3.13位的移动……………69
3.14在一个int或long值里提取高字节和低字节70
3.15从高字节和低字节组合成一个int或long值71
第4章串口通信……………………74
4.0简介 …………………74
4.1从Arduino发送调试信息到你的计算机……77
4.2从Arduino发送格式化的文本和数值数据…80
4.3在Arduino接收串口数据……………………83
4.4在单个消息中从Arduino发送多个文本字段88
4.5在Arduino上从单个消息中接收多个文本字段………………………93
4.6从Arduino发送二进制数据…………………96
4.7在计算机上接收来自Arduino的二进制数据100
4.8从Processing向Arduino发送二进制值……101
4.9发送多个Arduino引脚的值…………………104
4.10如何移动PC或Mac上的鼠标光标…………108
4.11使用Arduino控制谷歌地球…………………112
4.12在你的计算机中的文件里记录Arduino数据118
4.13在同一时间将数据发送到两个串口设备……121
4.14在同一时间接收来自两个串口设备的数据…124
4.15设置你的计算机上的Processing以发送和接收串口数据…………127
第5章简单数字和模拟输入……129
5.0介绍…………………129
5.1使用一个开关………131
5.2不用外部电阻使用一个开关…………………134
5.3可靠地检测一个开关的闭合…………………136
5.4确定开关被按下多长时间……………………139
5.5读取数字键盘………143
5.6读取模拟值…………146
5.7改变值的范围………147
5.8读取超过六路模拟输入………………………149
5.9显示5V以内的电压…152
5.10响应电压变化………155
5.11测量超过5V的电压(分压器)……………156
第6章获取传感器输入…………158
6.0介绍…………………158
6.1动作检测……………159
6.2光的探测……………161
6.3动作检测(集成被动红外探测器)…………163
6.4距离测量……………164
6.5精确测量距离………168
6.6振动检测……………171
6.7声音检测……………172
6.8温度测量……………175
6.9读取RFID标签………178
6.10跟踪旋转动作………181
6.11跟踪一个以上的旋转编码器的运动…………183
6.12在繁忙的程序里跟踪旋转动作………………185
6.13使用鼠标……………187
6.14从GPS获取位置…191
6.15使用陀螺仪检测旋转195
6.16方向检测……………200
6.17从游戏控制板(PlayStation)获取输入……205
6.18读取加速度…………207
第7章可视输出…………………210
7.0介绍…………………210
7.1连接和使用LED……212
7.2调节LED的亮度……215
7.3驱动高功率LED……216
7.4调整LED的颜色……218
7.5多个LED排序:创建一个条形图……………221
7.6多个LED排序:制作一个追逐序列(霹雳游侠)……………………224
7.7使用复用技术控制一个LED阵列……………225
7.8显示图像上的LED矩阵………………………228
7.9控制LED阵列:Charlieplexing方法…………231
7.10驱动7段LED显示器………………………236
7.11使用复用技术驱动多位7段LED显示器…239
7.12使用MAX7221移位寄存器驱动多位7段LED显示器……………242
7.13使用MAX72xx 移位寄存器控制LED阵列…244
7.14使用PWM扩展芯片(TLC5940)增加模拟输出的数量……………247
7.15使用模拟面板表作为显示器…………………250
第8章物理输出…………………252
8.0简介…………………252
8.1控制舵机的位置……254
8.2使用电位器或传感器控制一个或两个舵机…256
8.3控制连续旋转舵机的速度……………………257
8.4使用计算机指令控制舵机……………………258
8.5驱动无刷电机(使用业余调速器)…………260
8.6控制电磁铁和继电器261
8.7使物体振动…………262
8.8使用晶体管驱动有刷电机……………………264
8.9使用H桥控制有刷电机的旋转方向…………266
8.10控制有刷电机H桥的方向和速度……………269
8.11使用传感器来控制有刷电机的方向和转速(L293 H桥)…………271
8.12驱动双极步进电机…277
8.13驱动双极步进电机(使用EasyDriver板)…279
8.14驱动单极步进电机(ULN2003A)…………283
第9章音频输出…………………285
9.0简介…………………285
9.1音调播放……………286
9.2演奏简单的旋律……288
9.3产生一个以上的同步音………………………290
9.4生成音频音调的同时使LED渐暗……………292
9.5播放一个WAV文件…295
9.6MIDI控制……………298
9.7制作音频合成器……301
第10章遥控外部设备……………303
10.0简介…………………303
10.1对一个红外遥控器做出响应…………………303
10.2解码红外遥控信号…306
10.3模仿遥控器信号……309
10.4控制数码相机………312
10.5通过改装遥控开关来控制交流设备…………314
第11章显示屏的使用……………318
11.0 介绍…………………318
11.1 文字LCD屏的连接和使用…………………318
11.2 格式化文本…………321
11.3 光标和显示的开启和关闭……………………323
11.4 滚动文字……………325
11.5 显示特殊符号………328
11.6 创建自定义字符……331
11.7 显示比单个字符更大的符号…………………333
11.8 显示小于单个字符的像素……………………336
11.9 连接和使用图形LCD显示器………………338
11.10 创建用于图形显示器的位图………………341
11.11 在电视机上显示文本………………………343
第12章时间和日期的使用………348
12.0 介绍…………………348
12.1 创建延时……………348
12.2 使用millis来确定持续时间…………………349
12.3 更精确地测量一个脉冲的持续时间…………353
12.4 把Arduino作为一个时钟来用………………355
12.5 创建一个可以周期性调用函数的闹钟………364
12.6 使用一个实时时钟…367
第13章使用I2C和SPI进行通信………………………372
13.0 简介…………………372
13.1 使用BlinkM模块控制RGB LED……………375
13.2 使用Wii的双节棍加速度计…………………380
13.3 外部实时时钟的接口384
13.4 添加外部EEPROM存储器…………………386
13.5 用数字温度计读取温度………………………390
13.6 只用两条导线驱动4位7段LED显示……394
13.7 集成一个I2C端口扩展器……………………397
13.8 使用SPI驱动多位7段LED显示器………400
13.9 两个或两个以上的Arduino板之间的通信…402
第14章无线通信…………………406
14.0 介绍…………………406
14.1 使用低成本无线模块发送消息………………406
14.2 把Arduino接入ZigBee或802.15.4网络…412
14.3 将消息发送到一个特定的XBee……………417
14.4 在XBee间互传传感器数据…………………420
14.5 激活连接到XBee的执行器…………………425
14.6 使用低成本收发器发送消息…………………429
14.7 与蓝牙设备通讯……434
第15章以太网和网络……………437
15.0 简介…………………437
15.1 以太网扩展板的设置439
15.2 自动获取你的IP地址………………………441
15.3 解析主机名到IP地址(DNS)……………443
15.4 从Web服务器请求数据……………………445
15.5 使用XML从Web服务器请求数据…………451
15.6 把Arduino设置成一个Web服务器………454
15.7 处理进入的Web请求………………………457
15.8 处理针对特定页面的请求……………………460
15.9 使用HTML格式化Web服务器响应………465
15.10 使用表单的网页服务(POST)……………469
15.11 包含大量数据的网页服务…………………472
15.12 发送Twitter消息…480
15.13 发送和接收简单消息(UDP)……………485
15.14 从Internet时间服务器获取时间…………492
15.15 监测Pachube数据馈送……………………498
15.16 将信息发送到Pachube……………………504
第16章库的使用修改和创建……510
16.0 简介…………………510
16.1 使用内置库…………510
16.2 安装第三方库………511
16.3 库的修改……………512
16.4 创建你自己的库……516
16.5 创建一个使用其他库的库……………………521
16.6 为Arduino 1.0版更新第三方库……………527
第17章高级编程和内存操作……529
17.0 介绍…………………529
17.1 了解Arduino程序的构建过程………………530
17.2 判断可用和已用的RAM 量…………………532
17.3 存储和读取程序存储器中的数字值…………534
17.4 存储和检索字符串在程序存储器……………537
17.5 使用#define 和const而不用整数型变量…539
17.6 使用条件编译………540
第18章使用控制器芯片的硬件…543
18.0 介绍…………………543
18.1 在永久性EEPROM存储器中存储数据……546
18.2 使用硬件中断………550
18.3 设置定时器持续时间552
18.4 设置定时器脉冲宽度和持续时间……………554
18.5 创建一个脉冲发生器556
18.6 更改定时器的PWM频率……………………560
18.7 脉冲计数……………562
18.8 更精确的脉冲测量…564
18.9 快速测量模拟值……567
18.10 减少电池消耗……568
18.11 快速设定数字引脚572
18.12 使用编程器上传程序………………………576
18.13 更换Arduino的Bootloader………………577
18.14 对Uno重新编程来模拟原生的USB设备577
附件A电子元件…………………581
附件B使用原理图和数据手册…585
附件C电路的构建和连接………591
附件D软件问题排错诀窍………593
附件E硬件问题排错诀窍………596
附件F数字和模拟引脚……………598
附件GASCII和扩展字符集……601
附录H?
名家推荐:
“Michael Margolis编写的这本书给新兴的Arduino社区带来了福音。无论你的学习和工作背景如何,本书都能为你目前正在纠结的项目提供解决方案,并帮助你提升创作的想象力。我想我在工作台上永远离不开这本书了。”
——Arduino Uno顾问团队成员
Mikal Hart