Arduino编程从基础到实践
  • 推荐0
  • 收藏0
  • 浏览426

Arduino编程从基础到实践

(美)Brian Evans (布莱恩?埃文斯) (作者)  杨继志 (译者) 徐津平 (责任编辑)

  • 书  号:978-7-121-27253-0
  • 出版日期:2015-10-27
  • 页  数:288
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 原书名: Beginning Arduino Programming
  • 原书号:9781430237778
  • 维护人:林瑞和
目前Arduino开源硬件技术在国内渐渐兴起,相关的图书的市场表现不错,作为计算机的硬件科学,这本书apress系列书之一,内容正统,篇幅适中,翻译难度不大。与电子社已经获得版权的《beginning arduino》(偏重案例)和《arduino robotics》(偏重高端应用)相比,偏重初级与中级理论实践普及方面,属于入门图书,读者基数多。
本书在很多地方涉及了在Arduino编程手册中没有涉及的内容,甚至更深入地探讨了Arduino开发环境,提供了简单的全是干货的代码例程、简单易读的示意图和说明,遵循一定程度的“极简艺术”理念,通过使用简单并容易获得的硬件来培养以高雅的方式写代码的技能。本书将本书还涉及许多Arduino开发所独有的函数,这些函数用来控制数字和模拟量输入输出、定时器、随机事件,之后讨论如何编写自己的函数,以及如何使用丰富的Arduino库资源来控制各种各样的硬件和使用各种通信协议。
关于作者
Brian Evans 是专注于电子艺术装置领域的艺术家,同时也是位于丹佛的大都会州立学院的副教授。他教授艺术设计中的多学科融合课程和设计概论,包括特殊的艺术表现媒介、电子艺术品创作和 3D 打印课程。他在许多课程中使用了开源硬件,把它们用于艺术和设计创作,这些开源硬件包括 MakerBot 和 RepRap 的 3D 打印机及 Arduino 开发平台。
他的作品已经在洛杉矶巴恩斯德尔公园市政艺术画廊、奥兰治县的当代艺术中心、加州州立大学艺术博物馆、长滩市等地展出。Brian Evans 还是加拿大艾伯塔的班夫新媒体研究所开源硬件园地的常客和活跃分子。他于 2005 年在亚利桑那州大学获得美术学士学位,于 2008 年获得长滩市加利福尼亚州立大学的美术硕士学位,于 2009 年曾作为志愿者为纽约开源硬件高峰论坛服务。


关于技术顾问
Ryan Owens 毕业于华盛顿芝加哥大学,获得电子和计算机工程学位。他是 SparkFun Electronics 公司的设计工程师,他在那里设计新产品,为各层次的嵌入式电子爱好者编写手册和 “跟我学” 之类的指导书。 他也为电子技术初学者讲授初步的电子实践课程和 Arduino编程课程,无论是孩子还是 IT 专家都可以学习这些课程。
致 谢
没有我的妻子 Susan、同事和好朋友们的真诚支持和鼓励,我无法完成本书的写作。感谢你们对我的帮助;并感谢我的女儿 Kori,在我写作本书的过程中给了我精神上的支持;我还必须向我的父亲 Arvin 致敬并表示感谢,他帮助我挣脱了一些束缚,甚至可能最严重的一些羁绊;同时,我诚挚地向我的朋友和 Metropolitian State 公司的同事表示感谢,他们给了我一个成为人师的平台并鼓励我展开本书的写作。
感谢 Paul Badger, 我们俩围绕本书早期想法的反复讨论对我有很大的启发; 感谢 DavidMellis 对我的那些愚蠢的 E-mail 的回复;感谢 Tom Igoe,我们分享了那些有思想有内容的对话。本书的完成也离不开影响力巨大的活跃的社区创建者们的支持,是他们成就了Arduino 平台,还无私地分享了大量的成果。我受到了极大的启发,并使用了该平台的大量资源,感谢你们。
当然我还需要感谢出版者们——Apress 公司的了不起的编辑团队,他们不知疲倦地工作以使这本书出版:Frank Pohlmann,他给我机会实现这个蓝图;Jessica Belanger 帮助我坚持下去;James Markhan 使我从溜号状态返回到专注状态;也感谢技术顾问 Ryan Owens,他的洞察力和反馈对我完成这个项目帮助很大。
我必须感谢我的非常有创造力的天才般的学生们,他们使我在本书开始写作后不敢有丝毫松懈,并且给了我每天做我该做的事情的理由。

简介
本书可帮助你开发实用的 Arduino 控制器项目。我们主要关注物理计算方面的软件问题——通过设计软件代码控制物理实体来展现各种行为或通过软件实现人机互动。本书从讲解 Arduino 平台的基本内容开始,运行第一个例子代码,接下来讨论 Arduino 的类 C 编程语言的结构和语法,探讨变量、控制结构、数组和存储器。本书还涉及许多 Arduino 开发所独有的函数,这些函数用来控制数字和模拟量输入输出、定时器、随机事件,之后讨论如何编写自己的函数,以及如何使用丰富的 Arduino 库资源来控制各种各样的硬件和使用各种通信协议。
就像之前所说的,Arduino 适合模块化快速开发项目的理念。可以打这样一个比喻:我们在用代码实现项目蓝图时,就像是用“代码积木”以一种个性化的直观方法快速实现自己的设计目标。本书绝大部分论述方式都围绕了这样一种理念,通过实用项目来发展编程技巧,我们也提供了一些关于新项目和新元件使用的建议、新编程语言的试验项目,以及反哺技术社区的方法。本书有意避免涉及太深的电子技术理论、电路设计和琐碎的细节或其他基于特定硬件的练习项目,但是在每章最后回顾硬件方面的内容时提供了一些基础的物理计算公式。
本书在很多地方涉及了在 Arduino 编程手册中没有涉及的内容,甚至更深入地探讨了Arduino 开发环境,提供了简单的全是干货的代码例程、简单易读的示意图和说明。我在2007 年用 Arduino 给第十五系的学生上艺术和设计主修课时,编写了一本手册和一个小巧的 PDF 文档,这是我第一次编写 Arduino 编程知识,并不是一本简单的手册。这本精心编写的小册子,已经被译成西班牙语、俄语和荷兰语等版本,其中有许多内容与当前技术不同,可能跟不上 Arduino 的飞速发展,但它还是在全世界的工厂和课堂中被广泛使用。最近几年我没升级这本手册,我也不确信它现在还有用,因此希望本书能填补这个空白,成为这本手册的升级版。
本书读者对象
本书写给以 Arduino 为平台的艺术家、设计师、学生、喜欢创作小作品的人。在选择使用 Arduino 平台时,你需要一些在该平台上编程和实践的知识,本书的受众假定为没有编程经验的人。顺便说一下,用家用电脑去查找超出本书范围的答案会很有用。
Arduino 的大多数使用者通常不关心技术细节, 只想让其项目能够工作。 我非常理解这种想法,因为我就是其中一员。在还是一名艺术专业的学生时,我发现了可编程控制器,那时的艺术学校通常没有学写代码和缠电机的环境,Arduino 的到来改变了这一切。同样,我也不是一名数学爱好者,幸运的是,这也不是钻研写 Arduino 代码所预先要求具备的条件。
阅读本书
本书的每章内容都集中在几个基本项目上,这些项目又建立在相应章节所提到的基本概念之上。对于每个项目,都是先给出对项目的描述,之后讨论项目中需要的硬件。书中也提供一些关于如何建立这些简单的电路和如何把元器件连接到 Arduino 控制板的图示和说明。在学习这些项目的过程中,你可以在页边空白处做点笔记并写一些心得——我鼓励你这样做。一定要多加练习,试验新东西,观察新变化。
本书所涉及的项目都是非常典型的,或者是为演示设计新东西需要的基本概念而设计的。本书将遵循一定程度的“极简艺术”理念,通过使用简单并容易获得的硬件来培养以高雅的方式写代码的技能。一旦实践了这些典型的项目,这些项目就可以用到真正的项目中。本书不完全是在做这些实际项目,而是专注于如何编写代码并逐渐完善代码。书中的例子会互相借鉴,在需要理解正在编写的和逐渐完善的代码时,你可以回顾之前的例子。
例子代码的编写本着在任何地方都可以轻松复用的原则,或可以进一步改进为部件化的模块化的代码的原则。读者要花大量的时间提升编写复用代码的技巧,因此在得到一个独立的新项目时,你就会知道该如何下手。你可以随意更改这些通用的例子代码,例如改变数值、时间、引脚分配、变化幅度等,直到代码不工作了,再尝试把它弄好。在本书的例子中,我保持了一种十分特别的书写代码的风格,我极力主张你发展自己书写代码的风格,这种风格反映了你的思维方式和看待代码的方式。
做项目电路布线是非常简单、直观的,几乎不需要任何电子知识。第 12 章汇总了基本的电子器件知识,贯穿了我们讨论的编程方法,以及书中涉及的物理电路,回顾了编程与硬件之间的联系,包括电路是如何工作的、读图表及焊接方法等。如果你发现自己学第 12章之前的内容时比较辛苦,那么你可以先跳到第 12 章预习一下硬件知识。如果你对硬件已经有所了解,那么第 12 章可作为一个好的概要,回答一些你还不是很清楚答案的问题。可以把这些硬件知识看作一个简要的介绍,这些知识在我这几年的授课中发挥了比较重要的作用。
Arduino 1.0
在我编写这本书时,Arduino 的开发者们正在为创建更稳定、更高效的被叫作 Arduino1.0 的 Arduino 升级版开发软件而努力。 Arduino 1.0 的最终发布版本在本书出版时应该已经发行了。版本升级是非常重要的,因为要使事情做得更好,某些常规要有所突破才行。这意味着在阿尔法版本的 Arduino 软件下写的一些旧代码可能在 Arduino 1.0 版本上不能使用了。
相反,本书中的代码和 Arduino 开发环境的图片都是用 Arduino 1.0 Beta 发行版本做的(http://code.google.com/p/arduino/wike/Arduino1) , 因此本书中的 Arduino 软件界面可能与最终版本展示的界面有所不同,书中的一些代码也可能在旧版本的软件下不能工作,Arduino 1.0 软件的其他特征并没有完全在本书中展现,所以我没有写有关新特征的内容。在升级版本时还有一些关于硬件引脚升级的内容,但我们现在对这些具体内容还不太清楚,因此如果有异常问题发生,那么这可能要归结为 Arduino 1.0 软件的问题,从而查找在哪里发生了什么错误。
约定
在本书中我们使用了一些约定,包括使用定宽字体来标识例子代码,以及使用任何后面带有括号的字符串如 setup()或 loop()来标识调用函数。有时会从主句中分离出一个适合定宽字形的块。下面是一个多行注释的例子:
//this is a mulitline
//code example
? 注意 千万不要用比实际需要小的电阻,因为如果你向 LED 输入了太大的电流,则不但会造成 LED 的永久性损坏,也可能会损坏电路中的其他元件。
?下载代码
本书代码可以从 Apress 网站的代码资源下载页面下载,如果你需要发布本书中使用的例子代码,则请使用包括书名、作者、出版社、年份和 ISBN 的属性文件。

目录

第 1 章 开始 .................................................................................................................................1
Arduino 是为 DIY 爱好者设计的 ............................................................................................1
Arduino 生态系统 ...................................................................................................................3
Arduino 平台 ...................................................................................................................3
开源硬件 .........................................................................................................................4
社区 .................................................................................................................................5
Arduino 世界 ...................................................................................................................6
Arduino 采用 C 语言还是其他语言 .......................................................................................7
我们需要什么元件 .................................................................................................................9
进入正题 .............................................................................................................................. 11
安装软件 ...................................................................................................................... 12
连接到 Arduino ............................................................................................................ 13
打开一个框架 .............................................................................................................. 13
选择板子和串口 .......................................................................................................... 14
上传框架 ...................................................................................................................... 15
总结 ...................................................................................................................................... 16
第 2 章 代码架构 ....................................................................................................................... 17
什么是代码的框架 .............................................................................................................. 18
项目 1:RGB 闪灯 ............................................................................................................... 19
把它连上 .......................................................................................................................20
上传代码 ...................................................................................................................... 21
代码总结 ...................................................................................................................... 22
Arduino C 的结构 ................................................................................................................. 22
使用注释 ...................................................................................................................... 23
基本函数 ...................................................................................................................... 24
语句和语法 ...................................................................................................................26
确认和上传 ........................................................................................................................... 27
确认 ............................................................................................................................... 27
保存 .............................................................................................................................. 28
上传 .............................................................................................................................. 29
常见的错误 .................................................................................................................. 30
总结 ...................................................................................................................................... 32
第 3 章 使用变量 ...................................................................................................................... 34
项目 2:七色变色灯 ........................................................................................................... 35
把它们连接起来 .......................................................................................................... 35
上传源代码 .................................................................................................................. 36
代码总结 ....................................................................................................................... 37
什么是变量 .......................................................................................................................... 38
声明变量 ...................................................................................................................... 39
变量名 .......................................................................................................................... 40
数据类型 ...................................................................................................................... 41
变量修饰 ...................................................................................................................... 43
预定义常量 .................................................................................................................. 44
变量作用域 .................................................................................................................. 44
使用操作符 .......................................................................................................................... 45
数学运算符:+、-、*、/ ........................................................................................... 46
复合操作符:++、‐‐、+=、-=、 * =、/= ...................................................................... 47
运算顺序 ...................................................................................................................... 48
总结 ...................................................................................................................................... 49
第 4 章 进行判断 ...................................................................................................................... 50
项目 3:闪灯 ........................................................................................................................51
把它连接起来 ...............................................................................................................51
上传代码 ....................................................................................................................... 52
源代码总结 .................................................................................................................. 54
对比和逻辑操作 .................................................................................................................. 56
控制结构 .............................................................................................................................. 58
if .................................................................................................................................... 58
for.................................................................................................................................. 60
while ............................................................................................................................. 61
do ................................................................................................................................... 62
switch ............................................................................................................................ 63
break ............................................................................................................................. 64
continue ........................................................................................................................ 65
总结 ...................................................................................................................................... 65
第 5 章 数字输入和输出 ........................................................................................................... 67
Arduino I/O 扩展 .................................................................................................................. 68
项目 4:吵闹的蛐蛐 ............................................................................................................ 70
把它连起来 ................................................................................................................... 70
上传代码 ....................................................................................................................... 72
源代码总结 ...................................................................................................................73
数字函数 .............................................................................................................................. 75
pinMode() ..................................................................................................................... 75
digitalWrite() .................................................................................................................. 76
digitalRead() .................................................................................................................. 77
状态转换 ............................................................................................................................... 78
切换 .............................................................................................................................. 79
计数 .............................................................................................................................. 81
模式 ...............................................................................................................................82
总结 ...................................................................................................................................... 85
第 6 章 模拟输入、模拟输出 .................................................................................................. 86
模拟量揭秘 ........................................................................................................................... 87
项目 5:呼吸远程信息处理 ............................................................................................... 88
把它们连起来 .............................................................................................................. 89
上传代码 ...................................................................................................................... 91
源代码总结 .................................................................................................................. 91
模拟函数 .............................................................................................................................. 93
analogRead() ................................................................................................................. 93
analogWrite() ................................................................................................................ 95
analogReference() ......................................................................................................... 96
模拟串口监视器 ................................................................................................................... 97
读模拟值 ...................................................................................................................... 98
使用串口监视器 .......................................................................................................... 99
它是如何工作的 ........................................................................................................ 100
映射数值 ............................................................................................................................ 101
map() ........................................................................................................................... 101
constrain() ....................................................................................................................102
总结 .................................................................................................................................... 103
第 7 章 高级函数 .................................................................................................................... 104
时间函数 ............................................................................................................................ 105
delay() ......................................................................................................................... 105
delayMicroseconds() ................................................................................................... 106
millis() .......................................................................................................................... 107
micros() ....................................................................................................................... 109
随机函数 ............................................................................................................................ 109
random() ..................................................................................................................... 110
randomSeed() ............................................................................................................. 112
项目 6:环境温度 ............................................................................................................. 113
连接起来 .................................................................................................................... 114
上传源代码 ................................................................................................................ 116
源代码总结 ................................................................................................................ 118
写函数 ................................................................................................................................ 121
声明函数 .................................................................................................................... 121
调用函数 .................................................................................................................... 122
函数返回值 ................................................................................................................ 122
函数的参数 ................................................................................................................ 124
项目 7:HSB 彩色 LED ....................................................................................................... 125
把它们连起来 ............................................................................................................ 125
上传源代码 ................................................................................................................. 127
源代码总结 ................................................................................................................ 129
硬件中断 ............................................................................................................................ 130
attachInterrupt() ......................................................................................................... 131
detachInterrupt() ........................................................................................................ 132
总结 .................................................................................................................................... 132
第 8 章 数组和存储区 ............................................................................................................ 133
项目 8:占卜机 ................................................................................................................. 134
把它们连起来 ............................................................................................................ 134
上传源代码 ................................................................................................................ 136
源代码总结 ................................................................................................................ 139
数组 .................................................................................................................................... 143
声明数组 .................................................................................................................... 143
使用数组 .................................................................................................................... 145
字符数组 .................................................................................................................... 148
多维数组 .................................................................................................................... 149
Arduino 存储器 .................................................................................................................. 151
检查剩余的 RAM ....................................................................................................... 153
使用程序存储空间 .................................................................................................... 154
使用 EEPROM ............................................................................................................. 156
总结 .................................................................................................................................... 158
第 9 章 硬件库 ........................................................................................................................ 159
使用库 ................................................................................................................................ 160
生成一个实例 ............................................................................................................ 160
初始化库 .................................................................................................................... 161
LiquidCrystal 库 .................................................................................................................. 161
例子代码:用 Arduino 显示诗句 ............................................................................. 163
LiquidCrystal() ............................................................................................................. 164
begin() ......................................................................................................................... 165
print() .......................................................................................................................... 165
clear() .......................................................................................................................... 166
setCursor() .................................................................................................................. 166
例子代码:符号和 Characters() ................................................................................ 166
write() ......................................................................................................................... 168
createChar() ................................................................................................................ 169
例子代码:鱼缸动画 ................................................................................................ 171
scrollDisplayLeft()和 scrollDisplayRight() ..................................................................... 173
舵机库 ................................................................................................................................. 174
例子代码:闹钟 ......................................................................................................... 176
舵机 ............................................................................................................................ 177
attach() ........................................................................................................................ 177
write() .......................................................................................................................... 178
步进电机 .............................................................................................................................179
例子代码:60s 扫描 .................................................................................................. 183
Stepper ....................................................................................................................... 183
setSpeed() ................................................................................................................... 184
step() ........................................................................................................................... 184
SD 卡库 ............................................................................................................................... 186
例子代码:SD 卡记录仪 ........................................................................................... 188
File .............................................................................................................................. 189
SD.begin() .................................................................................................................... 190
SD.open() .................................................................................................................... 190
close() ......................................................................................................................... 191
write() ......................................................................................................................... 191
print() .......................................................................................................................... 191
例子代码:SD 卡闪烁 ................................................................................................ 192
available() ................................................................................................................... 193
read() .......................................................................................................................... 193
总结 .................................................................................................................................... 194
第 10 章 串行通信和 I2C ....................................................................................................... 195
使用硬件串口 .................................................................................................................... 196
项目 9:串口控制舵机 ..................................................................................................... 198
把它连起来 ................................................................................................................ 198
上传代码 .................................................................................................................... 199
代码总结 .................................................................................................................... 200
串口库 ................................................................................................................................ 200
begin() ......................................................................................................................... 201
available() ................................................................................................................... 201
read() ........................................................................................................................... 202
print() .......................................................................................................................... 204
println() ....................................................................................................................... 205
write() ......................................................................................................................... 205
项目 10:RFID 读卡器 ....................................................................................................... 206
把东西连接起来 ........................................................................................................ 206
上传源代码 ................................................................................................................. 207
源代码总结 ................................................................................................................ 209
软串口库 ............................................................................................................................ 210
SoftwareSerial() .......................................................................................................... 211
begin() ......................................................................................................................... 211
flush() .......................................................................................................................... 211
strncmp() .................................................................................................................... 212
项目 11:串行时钟 ........................................................................................................... 213
把它们连接起来 ........................................................................................................ 213
上传源代码 ................................................................................................................ 214
代码总结 .....................................................................................................................217
wire 库 ................................................................................................................................ 222
begin() ......................................................................................................................... 222
beginTransmission() .................................................................................................... 223
endTransmission() ....................................................................................................... 223
write() ......................................................................................................................... 223
requestFrom(); ......................................................................................................... 224
read() .......................................................................................................................... 224
总结 .................................................................................................................................... 224
第 11 章 继续 .......................................................................................................................... 226
建立更多的项目 ................................................................................................................ 226
红利项目 1:做个自动发送 Twitter 的项目 ............................................................ 226
红利项目 2:使东西运动 ......................................................................................... 229
红利项目 3:大型的东西 ......................................................................................... 235
学习其他语言 .................................................................................................................... 236
Firmata ........................................................................................................................ 236
Processing ................................................................................................................... 238
PureData ..................................................................................................................... 239
为社区做贡献 .................................................................................................................... 241
参与在线论坛 ............................................................................................................ 241
发布你的项目 ............................................................................................................ 243
总结 .................................................................................................................................... 245
第 12 章 基础电子学 ............................................................................................................... 247
基础电子学 ........................................................................................................................ 248
电路 ............................................................................................................................ 248
电源 ............................................................................................................................ 249
常见元件 ............................................................................................................................ 250
电阻 .............................................................................................................................251
电容 .............................................................................................................................251
二极管 ......................................................................................................................... 252
三极管 .........................................................................................................................253
开关 .............................................................................................................................255
电机 ............................................................................................................................ 256
读原理图 ............................................................................................................................. 257
原型 .................................................................................................................................... 258
面包板 ........................................................................................................................ 259
焊接 ..................................................................................................................................... 262
总结 .................................................................................................................................... 264
附录 资源 ................................................................................................................................ 265
附加资源 ............................................................................................................................ 265
论坛 ............................................................................................................................ 265
指导书 ........................................................................................................................ 266
其他素材 .................................................................................................................... 266
选择供应商 ......................................................................................................................... 267
本书中用到的元件 ............................................................................................................ 268

读者评论