Arduino魔法书:实现梦想的工具和技术 奥松机器人
2020-03-01 402浏览
- 1.
- 2.
- 3.
- 4.内 容 简 介 《Arduino魔法书:实现梦想的工具和技术》是一本关于使用Arduino实现梦想的作品。作者Jeremy Blum有一句名言:“我们生活在未来。”利用可用的工具和在本书中将学到的知识,任何人都有机会、 也有能力选择一款Arduino微控制器并在几分钟内利用它控制周围的世界——这一梦想直到最近才成 为可能。微控制器是一个可编程的平台,它使我们能够使用相对简单的命令,来定义复杂的机械、电 气和软件系统的操作。通过对本书的学习,我们将使用Arduino制作各种作品,从运动检测到无线控 制系统再到互联网通信。 本书适用于任何经验层级的Arduino爱好者。读者不需要具备或者只需具备少量编程和电气工程 方面的经验。为了照顾到各个层次的读者,本书设计了各种可选章节、小栏目或短节选,并在其中详 细解释了具体的概念。 ExploringArduino:Tools and Techniques for Engineering Wizardry, 978-1118549360, Jeremy Blum Copyright © 2013 by Wiley Publishing, Inc., Indianapolis, Indiana All rights reserved. This translation published under license. No part of this book may be reproduced in any form without the written permission of John Wiley & Sons, Inc. Copies of this book sold without a Wiley sticker on the back cover are unauthorized and illegal. 本书简体中文字版专有翻译出版权由美国 John Wiley & Sons, Inc.公司授予电子工业出版社。未经 许可,不得以任何手段和形式复制或抄袭本书内容。 本书封底贴有 John Wiley &Sons,Inc.防伪标签,无标签者不得销售。 版权贸易合同登记号 图字:01-2014-3370 图书在版编目(CIP)数据 Arduino 魔法书:实现梦想的工具和技术 /(美)布鲁姆(Blum,J.)著;况琪,王俊升译. —北京:电子 工业出版社,2014.10 书名原文:Exploringarduino:toolsand techniques for engineering wizardry ISBN 978-7-121-24067-6 Ⅰ. ①A… Ⅱ. ①布… ②况… ③王… Ⅲ. ①单片微型计算机 Ⅳ. ①TP368.1 中国版本图书馆 CIP 数据核字(2014)第 187091 号 策划编辑:林瑞和 责任编辑:徐津平 印 刷:三河市双峰印刷装订有限公司 装 订:三河市双峰印刷装订有限公司 出版发行:电子工业出版社 北京市海淀区万寿路 173 信箱 邮编:100036 开 本:787×980 1/16 印张:20.5 字数:400 千字 版 次:2014 年 10 月第 1 版 印 次:2014 年 10 月第 1 次印刷 定 价:59.00 元 凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系, 联系及邮购电话:(010)88254888。 质量投诉请发邮件至 zlts@phei.com.cn,盗版侵权举报请发邮件至 dbqq@phei.com.cn。 服务热线:(010)88258888。
- 5.献给我的祖母——那个终生保持着好奇心并 善于激励他人的人,她启发我每天不断向前。
- 6.IV Arduino 魔法书:实现梦想的工具和技术 关于作者 Jeremy Blum 在康奈尔大学取得了电气和计算机工程专业的硕士学位,他还 在同一领域取得了学士学位。在康奈尔大学,他通过由他发起并领导的康奈尔大 学可持续设计组织(Cornell University Sustainable Design)监督了国内外几座生 态建筑的设计和施工,该组织是一个美国承认的可持续设计组织,曾受到美国和 世界绿色建筑委员会(U.S. and World Green Building Councils)CEO 的特别称赞。 同样,Jeremy 也将他的激情付诸电气工程领域,设计了太阳能家庭能源监控系统、 革命性的光导纤维 LED 照明系统及追踪太阳的智能太阳能面板。他还负责协助 启动了一个首创的创业者协同工作空间,每年致力于许多学生创业项目(也包括 一些他自己的创意)的合作开发。 Jeremy 还设计了广受称赞的义肢控制方法、手势识别系统及楼宇自动化系 统等许多项目。他设计了 MakerBot Replicator 3D 打印机(被世界各国的人们使 用,包括像 NASA 这样知名组织)的电子系统,以及 MakerBot Digitizer 3D 扫描 仪的原型电子系统和固件。作为知名组织 Creative Machines Lab 的研究员,他致 力于制作能够自我组装的机器人、自学习四足机器人及重新定义个人制造的 3D 打印机。他将这项研究呈送给了同行审阅的期刊和远在印度的学术会议。 Jeremy制作的YouTube视频已经将数百万人带入了工程学的大门,是互联网 上最流行的Arduino入门教程。他曾开发了入选探索频道(Discovery Channel)的 开源硬件项目和入门教程,并因此被国际上的开源社区和“创客”社区所熟知, 赢得了一些奖项和黑客马拉松(hack-a-thons)大赛。Jeremy入选了美国电气和电 子工程师学会(American Institute of Electrical and Electronics Engineers)的 2012 工程学新面孔(2012 New Face of Engineering)榜单。 他通过自己的公司 Blum Idea Labs LLC 提供工程学咨询服务,并向纽约的年
- 7.关于作者 轻学生教授工程学和可持续发展课程。Jeremy 的激情正在通过创新的工程学解 决方案,改变着人们的生活和我们的家园。你可以在 Jeremy 的网站上进一步了 解他和他的工作,网址是:www.jeremyblum.com。 关于技术编辑 Scott Fitzgerald 是一名艺术家和教育工作者。自 2006 年起,他就在教学中 将 Arduino 平台当作教具,并且自 2005 年起,就在纽约大学的交互性电信项目 (Interactive Telecommunications Program,ITP)中教授物理计算,向艺术家和设 计师介绍微控制器。Scott 为 Arduino 团队工作,为新产品撰写文档,并创作入 门教程来向人们介绍 Arduino 平台。他在 2011 年曾经是 Making Things Talk 第 2 版的技术编辑,并在 2012 年为 Arduino 官方入门套件(Arduino Starter Kit)撰 写了附赠的图书。 V
- 8.VI Arduino 魔法书:实现梦想的工具和技术 致 谢 首先,必须感谢在 Wiley 出版社的朋友帮助我完成了这本书:感谢 Mary James 当初鼓励我撰写这本书;感谢 Jennifer Lynn 全程监督了我的写作。我还欠 Scott Fitzgerald 一个大大的感谢,感谢他在本书的技术编辑过程中的批判性眼光。 如果没有 element14 的鼎力支持,我可能永远无法制作出我的 Arduino 入门 系列视频教程,它们是本书的序曲。尤其是 Sabrina Deitch 和 Sagar Jethani,他 们是绝佳的合作伙伴,我很荣幸能与他们一起工作。 在撰写本书主要部分的同时,我还要完成硕士学位并经营两家公司,所以我 要特别感谢我的教授和同事,感谢他们在我尝试平衡所有责任时理解我。 最后,我想感谢我的家庭,特别是我的父母,还有我的兄弟 David,是他们 持续的激励,让我明白了做这些事情的意义。
- 9.前 言 前 言 你拥有绝佳的时机。正如我经常喜欢说的, “我们生活在未来”。利用如今可 用的工具和书中的知识,你就有机会、也有能力让梦想变成现实。让任何人选择 一款微控制器并在几分钟内利用它控制周围的世界——这一梦想直到最近才成 为可能。你可能已经猜到了,微控制器是一个可编程的平台,它使你能够使用相 对简单的命令,来定义复杂的机械、电气和软件系统的操作。Arduino 微控制器 平台将成为你的新宠,带你探索电子、编程、人机交互、艺术、控制系统及更加 广阔的世界,有了它就有了无限的可能。通过对本书的学习,你将掌握使用 Arduino 制作各种作品的方法,从运动检测到无线控制系统再到互联网通信。 无论你是工程领域彻头彻尾的新手,还是打算入门嵌入式系统设计的经验丰 富的老兵,Arduino 都是一个绝佳的起点。你在寻找一本 Arduino 开发的通用参 考手册吗?本书也非常适合你,它会引导你完成一系列具体项目,而你以后也可 以再次翻阅本书来查找代码片段、最佳范例和系统原理图等资料。电气工程、系 统设计、编程实践……这些你在阅读时学到的知识在 Arduino 平台之外也有广泛 的应用。通过对本书的阅读,你将具备承担各种工程项目的能力,不论它们使用 的是 Arduino 还是其他平台。 本书对象 本书适合任何经验层级的 Arduino 爱好者。章节是彼此相关的,要利用前面 章节中的概念和项目组件来实现更加复杂的想法。但不要担心,当你面临全新的、 复杂的想法时,会有一个交叉引用来提示你相关概念第一次出现在书中的何处, 以便很快回想起来。 VII
- 10.VIII Arduino 魔法书:实现梦想的工具和技术 本书假设你不具备或者只具备很少的编程和电气工程方面的工作经验。为了 照顾到各个层次的读者,本书设计了各种可选章节、小栏目或短节选,在其中详 细解释了具体的概念。尽管这些小栏目对你更深入地理解 Arduino 的工作原理来 说并不是必需的,但它们为更具好奇心的读者提供了进一步关注技术性话题的机 会。 你将通过本书学到什么 本书不是食谱书。如果你想遵循手把手地指导自己如何搭建一个具体项目的 书,而不需要解释为什么要这么做,那本书便不适合你。你可以把本书作为一本 导论,其中介绍了电气工程、计算机科学、产品设计和高级思维;你也可以把 Arduino 作为媒介,通过动手实践的方式来体验这些概念。 当我们在本书中演示如何搭建 Arduino 项目的硬件组件时,你学到的将不仅 是如何将它们连接在一起,还有如何阅读原理图,为什么将某个器件用于某项功 能,如何通过数据手册为自己的项目选择合适的器件等。在编写软件时,我提供 了完整的程序代码,但你会逐步走过几个迭代性的过程来创建最终的程序。这会 帮助你巩固具体的程序函数、良好的代码格式化实践和对算法的理解。 本书会讲授物理概念、算法、数字化设计原理及具体的 Arduino 编程概念。 我希望,通过对本书中案例的学习,你不仅能成为一名熟练的 Arduino 开发者, 还能学会一些技巧,去开发更加复杂的电气系统,并在其他领域或其他平台上继 续从事工程学方面的工作。 本书使用的标注 在本书中使用了下列标注和图标,以在一些最重要或最有用的信息上吸引你 的注意。 警告 请你一定要留意这样的条目。如果一旦错误地执行某些步骤就可能 导致电子器件损坏,你就会看到这种警告。 提示 这些条目包含了关于如何执行简单任务的快速提示,这可能对你手 头的任务有所帮助。
- 11.前 言 注意 这些条目包含了对你来说可能很重要的额外信息,包括视频和在线 资料的相关链接,它们会让具体项目的开发变得更加轻松。 样例标题 这样的条目对当前话题或相关话题做了更加深入的讲解。 获取器件 幸运的是,你可以方便地获得实施本书中项目所需的器件。本书译者已经根 据本书内容提供了这些器件的获得地址:http://kuangqi.me/。 建议你先买基本套件。随着阅读的深入,你还可以购买扩展套件。不想购买 套件吗?别担心。在每章的开头,有一个该章所需的详细器件列表。本书原著的 专题网站 www.exploringarduino.com,也提供了一些链接,通过它们可以找到每 章所需的器件。 注意 你是否已经从 Newark 获得了本书的捆绑套装?如果是,那么你就 可以继续了。 你需要什么 除了用来搭建 Arduino 项目的具体器件以外,你的 Arduino 探险之旅还需要 一些其他工具和材料。最重要的是,你需要一台兼容 Arduino 集成开发环境(IDE) 的计算机(Mac OS X 10.4 以上版本,Windows XP 以上版本,或者一个 Linux 发行版)。在必要时我会为这些操作系统中的操作做出说明。 你可能还想要一些额外的工具,用来调试、组装硬件等。它们对完成本书中 的项目来说不是必需的,但在你拓展电气工程技能时,这些工具在其他项目中迟 早有用。我推荐如下工具。 一把烙铁和一些焊料(完成本书中的项目并不需要焊接,但你可能希望 在洞洞板上组装自己的电路,或者你可能想购买需要焊接组装的扩展 板。) 一台万用表(在调试过程中有用,但不是必需的。) 一组小型螺丝刀 一支热熔胶枪 IX
- 12.X Arduino 魔法书:实现梦想的工具和技术 源代码和数字化内容 本书的主要专题网站是 www.exploringarduino.com,它是由本书作者维护的。 你可以在这个网站上找到每章的代码并下载(还有视频、链接及其他有用的材 料)。Wiley 也维护了一个关于本书数字化内容的仓库,网址是 www.wiley.com。 本书代码可在 www.wiley.com/go/exploringarduino 网页的“Download Code”标签 下下载。 你也可以在 www.wiley.com 上根据 ISBN(本书原著的 ISBN 为 978-1-11854936-0)搜索本书原著,从而找到代码。 在每章的开始处,你可以找到本章主要代码的下载地址。在每章中,你还能 在代码清单的标题和文本中找到你需要的代码文件的文件名。 在网站 www.exploringarduino.com 和 www.wiley.com 上提供的代码是 ZIP 压 缩包。下载代码之后,使用适当的工具解压缩即可。 注意 由于许多图书的书名大同小异,所以通过 ISBN 搜索可能会更方便 一些。本书原著的 ISBN 是 978-1-118-54936-0。 勘误 我们尽力保证文本和代码的正确性。然而人无完人,错误在所难免。如果你 在本书中发现了错误,比如拼写错误或者代码错误,我们会感谢你的反馈。通过 提交勘误,你可能会消除其他读者几个小时的困惑,与此同时,你可以帮助我们 提供更有用的信息。 要查找本书原著的勘误,请访问 www.wiley.com/go/exploringarduino 并单击 “Errata”链接。 补充材料和技术支持 在你的 Arduino 探险之旅当中,不可避免地会遇到问题和麻烦。使用 Arduino 最大的一个好处就在于可以在网上找到绝佳的技术支持社区。这个极为活跃的 Arduino 用户大本营会十分乐意帮助你。下面列出了一些可能会帮到你的资源。 官方 Arduino 参考手册 www.arduino.cc/en/Reference/HomePage
- 13.前 言 我的 Arduino 入门教程系列视频 www.jeremyblum.com/category/arduino-tutorials adafruit 公司的 Arduino 入门教程系列视频 learn.adafruit.com/category/learn-arduino SparkFun 的电子学入门教程 learn.sparkfun.com/tutorials Arduino 官方论坛 www.arduino.cc/forum element14 Arduino 社区 www.element14.com/community/groups/arduino 如 果 你 用 尽 了 这 些 资 源 , 却 还 是 无 法 解 决 你 的 问 题 , 则 请 在 Twitter (@sciguy14)上联系我,我也许能帮上忙。你也可以直接通过我的网站上的联系 页面(www.jeremyblum.com/contact)来与我取得联系,但我通常没法保证快速 回复。 Arduino 是什么 Arduino 原型平台的最大特点在于你想让它是什么,它就是什么。Arduino 可以是一个植物灌溉自动控制系统,也可以是一个 Web 服务器,甚至可以是四 轴飞行器的自动驾驶仪。 Arduino 是一个微控制器开发平台,它配备了直观的编程语言,你可以使用 Arduino 集成开发环境(IDE)来开发它。你可以为 Arduino 安装传感器、效应 器、灯、扬声器、扩展模块(shield,本书译作“扩展板”)及其他集成电路,来 将 Arduino 变成一个可编程的“大脑” ,应用于几乎任何控制系统。 本书不可能涵盖 Arduino 能做的所有事情,只要你的想象力是无穷的,可能 性就是无穷的。因此,本书的目标是通过实施项目来让你熟悉 Arduino 的功能, 学习开发自己的项目时所需的技巧。 你会在第 1 章中学到更多关于 Arduino 及这块板卡的变体。如果你渴望了解 Arduino 的所有内部工作原理,那么你很幸运:它是完全开源的,所有的电路图 和文档都可以在 Arduino 网站上免费获得。附录提供了一些 Arduino 的技术指 标。 XI
- 14.XII Arduino 魔法书:实现梦想的工具和技术 一个开源平台 如果你是一个开源世界的新人,则你一定会满意的。本书不会详细介绍开源 硬件运动,但你应该了解一点这种思想,是它让 Arduino 变得如此美妙。如果你想 全面了解什么是开源硬件,则请查阅开源硬件协会网站(www.oshwa.org/definition) 上的定义。 注意 你可以从我的 TEDx 演讲中学到所有关于开源运动的知识:http://kuangqi.me/arduino/,进入该网站即可找到。你也可以在本章开头处 的 Wiley 网站上找到这个视频。 由于 Arduino 是开源硬件,所以任何人都可以免费获取所有的设计文件、原 理图及源代码被。这不仅意味着你可以更方便地改造 Arduino,以用于非常特定 的功能,还意味着你可以将 Arduino 平台整合到你的设计中,制作并销售 Arduino 的复制品,并在其他项目中使用 Arduino 软件库。尽管本书使用的几乎全部是官 方 Arduino 硬件,但你也可以使用数以百计的 Arduino 衍生板卡(它们通常添加 了特别的功能)来制作本书中的项目。 Arduino 的开源许可证还允许商业化地重用他人的设计(只要你不在自己的 设计上使用 Arduino 商标)。所以,如果你在一个令人兴奋的项目原型中使用了 Arduino,而你还想将其转化为一个商业产品,那么你是可以这样做的。举例来 说,你可能听说过像 MakerBot Replicator 3D 打印机这样的产品,它的电子系统 是基于 Arduino Mega 平台的(www.thingiverse.com/thing:16058) 。(大爆料:我 设计了那块主板!) 在使用本书时,请确保遵守了本书中源代码和硬件的许可证。一些许可证要 求你在发布基于他人已有的设计时提供原始作者的信息;有的则要求你必须在相 同的许可下分享你的改进工作。这样的分享帮助社区成长,所有了不起的在线文 档和技术支持也正是源自于此,在你的 Arduino 探险之旅中,你一定会经常参考 它们。我为本书编写的所有的代码示例(除非特别声明)都是基于 GNU 通用公 开许可(GPL)的,你可以随心所欲地使用它们。 本书之外 有人可能对我在 YouTube 上流行的系列视频“Arduino 和电子学入门教程” (www.youtube.com/sciguy14)很熟悉了。本书中我也多次提到它们,你可以通过 这些视频更为深入地了解书中所涵盖的技术主题。对电子器件和微控制器利用计
- 15.前 言 算机科学知识,将它们创造性地组合,来创造卓越的作品,如果你对此感到好奇, 可以在我的作品集(www.jeremyblum.com/portfolio)中查看样例项目。同 Arduino 一样,我的绝大部分作品都通过开源许可发布,允许你针对自己的需求方便地复 制它们。 我渴望知道你利用在本书中学到的技巧做了什么,并期待你将这些与我和其 他朋友分享。祝你在 Arduino 探险之旅中好运! XIII
- 16.XIV Arduino 魔法书:实现梦想的工具和技术 目 录 第 1 部分 Arduino 工程基础 第 1 章 让你的 Arduino 闪烁 探索 Arduino 生态系统 /1 /2 /3 Arduino 功能 /3 Arduino 板卡 /7 创建你的第一个程序 / 12 下载并安装 Arduino IDE / 12 运行 IDE 并连接 Arduino / 13 分析你的第一个程序 / 15 本章小结 第2章 数字输入、输出和脉冲宽度调制 数字输出 / 17 / 18 / 19 连接一个 LED 并使用面包板 / 19 数字输出端口编程 / 23 使用 for 循环 / 24 analogWrite()与脉冲宽度调制 / 25 读取数字输入 / 28 读取带有下拉电阻的数字输入 / 28 使用“有弹性的”按键 / 30 制作一个可控的 RGB LED 夜灯 / 33
- 17.目 本章小结 录 / 37 第 3 章 读取模拟传感器 / 38 理解模拟和数字信号 / 39 比较模拟和数字信号 / 39 将模拟信号转换为数字信号 / 40 利用 Arduino 读取模拟传感器:analogRead() / 41 读取电位器 / 42 使用模拟传感器 / 45 利用可变电阻制作自己的模拟传感器 / 50 使用阻性分压器 / 50 利用模拟输入控制模拟输出 / 52 本章小结 第 2 部分 控制环境 第 4 章 三极管与电机驱动 驱动直流电机 / 54 / 55 / 56 / 57 操作大电流感性负载 / 58 利用 PWM 控制电动机转速 / 62 使用 H-桥控制直流电机的方向 / 64 驱动伺服电机 / 70 理解连续旋转伺服电机和标准伺服电机的区别 / 71 理解伺服电机控制 / 71 控制伺服电机 / 75 制作扫描式距离传感器 / 76 本章小结 / 80 第 5 章 发出声音 理解扬声器的工作原理 / 81 / 82 声音的性质 / 82 扬声器是如何发声的 / 83 使用 tone()发出声音 / 84 包含定义文件 / 85 给扬声器接线 / 86 产生声音序列 / 88 XV
- 18.XVI Arduino 魔法书:实现梦想的工具和技术 理解 tone()函数的限制 / 91 制作一架微型钢琴 / 91 本章小结 / 94 第 6 章 USB 和串口通信 理解 Arduino 的串口通信功能 / 95 / 96 使用内置或外置 USB-串口转换器的 Arduino 板卡 / 97 使用次级含 USB 功能 ATMega MCU 来模拟串口转换器的 Arduino 板卡 / 99 使用单个带 USB 功能 MCU 的 Arduino 板卡 / 101 带有 USB-Host 功能的 Arduino 板卡 / 101 监听 Arduino / 102 使用 print 语句 / 102 使用特殊字符 / 103 改变数据类型表示 / 105 与 Arduino 通信 从计算机或其他串口设备上读取信息 / 105 / 106 与桌面应用程序通信 / 112 与 Processing 通信 / 113 学习 Arduino Leonardo(及其他基于 32U4 的 Arduino)的特殊技巧 / 119 模拟键盘 / 119 模拟鼠标 / 124 本章小结 / 127 第 7 章 移位寄存器 / 129 理解移位寄存器 / 130 发送并行和串行数据 / 131 使用 74HC595 移位寄存器 / 131 使用 Arduino 进行串行移位输出 / 134 在二进制和十进制间转换 / 136 用移位寄存器控制灯光动画 / 137 搭建“光骑士” / 137 用 LED 条形图响应输入 / 139 本章小结 / 142
- 19.目 第 3 部分 Arduino 通信接口 录 XVII / 143 第 8 章 I2C 总线 / 144 I2C 总线的历史 / 145 2 I C 硬件设计 / 145 通信方案与 ID 值 / 146 硬件要求和上拉电阻 / 147 2 与 I C 测温探头通信 / 148 设置硬件 / 148 参考数据手册 / 149 编写软件 / 151 2 将移位寄存器、串口通信和 I C 通信结合 / 153 为温度监控系统搭建硬件 / 153 修改嵌入式程序 / 154 编写 Processing 程序 / 156 本章小结 / 159 第 9 章 SPI 总线 / 160 SPI 总线概述 / 161 SPI 硬件和通信设计 / 162 硬件配置 / 162 通信方案 / 163 2 比较 SPI 与 I C / 164 与 SPI 数字电位器通信 / 164 从数据手册中获取信息 / 164 设置硬件 / 167 编写软件 / 169 用 SPI 数字电位器制作视听显示系统 / 171 设置硬件 / 172 修改软件 / 173 本章小结 第 10 章 连接液晶显示器 / 175 / 176 设置 LCD / 177 使用 LiquidCrystal 库写入 LCD / 180
- 20.XVIII Arduino 魔法书:实现梦想的工具和技术 向显示器输出文本 / 180 创建特殊符号和动画 / 182 制作一个私人自动恒温器 / 185 设置硬件 / 185 用按键调节设定值 / 188 添加声音报警和电扇 / 189 整合:完整的程序 / 190 升级项目 / 194 本章小结 第 11 章 使用 XBee 收发器进行无线通信 / 194 / 195 理解 XBee 无线通信 / 196 XBee 无线收发器 / 197 XBee 无线收发器扩展板和串口连接 / 198 配置 XBee / 201 用扩展板或 USB 适配器配置 / 202 选择 Xbee 设置并将 XBee 连到主机上 / 203 用 X-CTU 配置 XBee / 204 用串口终端配置 XBee / 207 与计算机无线通信 为远程 Arduino 供电 / 209 / 209 回顾串口示例:用电位器控制 Processing / 211 回顾串口示例:控制一个 RGB LED / 214 与另一个 Arduino 通信:制作无线门铃 / 216 系统设计 / 217 发射器硬件 / 218 接收器硬件 / 218 发射器软件 / 219 接收器软件 / 220 本章小结 第 4 部分 高级的话题和项目 第 12 章 硬件和定时器中断 使用硬件中断 / 223 / 225 / 226 / 227
- 21.目 录 XIX 理解轮询和中断间的折中 / 228 理解 Arduino 的硬件中断能力 / 229 搭建并测试硬件消抖动的按键中断电路 / 230 使用定时器中断 / 237 理解定时器中断 / 237 获取软件库 / 238 近乎于同时地执行两个任务 / 238 搭建一个中断驱动的音响 / 239 音响硬件 / 239 音响软件 / 240 本章小结 第 13 章 用 SD 卡记录数据 数据记录的准备工作 / 242 / 243 / 244 用 CSV 文件格式化数据 / 244 为数据记录准备 SD 卡 / 245 将 SD 卡接入 Arduino / 249 SD 卡扩展板 / 249 SD 卡 SPI 接口 / 253 写入 SD 卡 / 253 读取 SD 卡 / 258 使用一个实时时钟 / 261 理解实时时钟 / 261 使用实时时钟 / 263 做一个入口记录仪 / 268 记录仪硬件 / 268 记录仪软件 / 270 数据分析 / 273 本章小结 第 14 章 将你的 Arduino 联网 互联网、Arduino 和你 / 274 / 275 / 276 网络术语 / 276 客户端与服务器 / 279 将 Arduino 联网 / 279
- 22.XX Arduino 魔法书:实现梦想的工具和技术 在网上控制 Arduino / 279 准备 I/O 控制硬件 / 280 设计一个简易网页 / 280 编写 Arduino 服务器程序 / 282 通过网络控制 Arduino / 286 把实时数据发送给绘图服务 / 290 在 Xively 上创建实时数据源 / 290 添加数据源组件 / 295 本章小结 附录 ATMega 数据手册和 Arduino 原理图揭秘 阅读数据手册 / 299 / 300 / 300 分解数据手册 / 300 理解器件引脚定义 / 302 理解 Arduino 原理图 / 304
- 23.第1部分 Arduino 工程基础 本部分内容 第1章 让你的 Arduino 闪烁 第2章 数字输入、输出和脉冲宽度调制 第3章 读取模拟传感器
- 24.2 Arduino 魔法书:实现梦想的工具和技术 第1章 让你的 Arduino 闪烁 本章所需的器件: Arduino Uno USB 电缆 本章的代码和数字化内容 本章的代码、视频及其他数字化内容可以在以下网址中找到: www.exploringarduino.com/content/ch1。 另外,所有的代码都可以在 www.wiley.com/go/exploringarduino 网页上的 “Download Code”标签中找到。在第 1 章中提供下载的代码根据其在本章中的名 称单独命名。 现在你已经对 Arduino 平台和它的功能有了一定的认识,是时候在 Arduino 的世界中探索你的选择了。在本章,你要考查可用的硬件,学习关于编程环境和 语言的知识,然后编写你的第一个程序并运行它。一旦你掌握了 Arduino 所能提 供的功能,你就要编写第一个程序并让你的 Arduino 闪烁起来! 注意 若 要 观 看 一 个 介 绍 Arduino 平 台 的 视 频 教 程 , 则 请 访 问 :http://kuangqi.me/arduino/,进入该网站即可找到。你也可以在本章开头给 出的 Wiley 网站上找到这个视频。
- 25.第1章 让你的 Arduino 闪烁 探索 Arduino 生态系统 在 Arduino 探险之旅中,你将在项目中依赖 3 个主要的器件: Arduino 板卡本身; 外部硬件(包括扩展板和手工制作的电路,你将在本书中探索它们); Arduino 集成开发环境,或称 Arduino IDE。 所有的这些系统构件协同工作,使你几乎能利用 Arduino 做任何事情。 你有很多可供选择的 Arduino 开发板,但本书将主要使用官方的 Arduino 板 卡。由于这些板卡都被设计成可以通过相同的 IDE 来编程,所以你通常可以使 用任何现代的 Arduino 板卡,不经修改或稍加修改即可完成本书中的项目。然而 在必要时,你会看到关于为一些项目使用不同板卡的提示。绝大部分项目使用的 是 Arduino Uno。 你首先要探索被内建在每片 Arduino 板卡中的基本功能,然后考查每块现代 板卡间的不同之处,这样你就能在为下一个项目选择板卡时做出明智的决定。 Arduino 功能 所有的 Arduino 板卡都具有几个关键的能力和功能。花点时间来考查 Arduino Uno(见图 1-1),这将是你的基本配置。下面是一些你需要关注的关键器件: Atmel 微控制器; USB 编程/通信接口; 稳压器和电源连接; 引出的 I/O 引脚; 调试、供电和 RX/TX LED; 复位按键; 在线串行编程器(ICSP)连接器。 3
- 26.图 1-1 7-12V 直流输入 USB 转串口电路 接器 USB 连 复位按键 Arduino Uno 器件 引用自:Arduino,www.arduino.cc 电源和辅助引脚 模数转换器(ADC)输入 MCU ATMega328 接器(ICSP) MCU 编程连 调试 LED 通用 I/O 4 Arduino 魔法书:实现梦想的工具和技术
- 27.第1章 让你的 Arduino 闪烁 【Atmel 微控制器】 每片 Arduino 的核心都是一个 Atmel 微控制器单元(MCU)。绝大部分的 Arduino 板卡,包括 Arduino Uno,使用的是一片 AVR ATMega 微控制器。如图 1-1 所示的 Arduino Uno 使用了一片 ATMega 328p。Due 是一个例外,它使用了 一片 ARM Cortex 微控制器。这个微控制器负责保存所有已编译的代码并执行指 定的命令。Arduino 编程语言使你能够访问微控制器的外设,包括模数转换器 (ADC)、通用输入/输出(I/O)引脚、通信总线(包括 I2C 和 SPI)及串口。所 有这些有用的功能都从微控制器上那些微小的引脚引出到了 Arduino 上更容易 使用的母头连接器上,你可以将导线或者扩展板插入其中。一个 16MHz 的陶瓷 谐振器连接到了 ATMega 的时钟引脚,作为所有程序指令执行的参考。你可以使 用复位按键来重启你的程序。绝大部分 Arduino 板卡带有一个已经连接到 13 号 引脚的调试 LED,它使你能够不连接额外的电路而运行你的第一个程序(让一 个 LED 闪烁)。 【编程接口】 在通常情况下,ATMega 微控制器的程序是用 C 语言或者汇编语言编写的, 然后利用一个专用的编程器(见图 1-2)通过 ICSP 接口进行编程。也许 Arduino 最重要的特性就是它可以方便地通过 USB 接口编程,而不需要使用一个单独的 编程器。这个功能是由 Arduino 启动引导程序(bootloader)实现的。这个启动 引导程序在工厂里(使用 ICSP 接口)预先装载到 ATMega 中,它使你能够通过 串行 USART(通用同步/异步收发器)来将程序装载到 Arduino,而不需要使用 单独的编程器。(你可以在“Arduino 启动引导程序和固件设置”栏目中进一步 了解启动引导程序的工作原理。) 在 Arduino Uno 和 Mega 2560 上,还有第二个微控制器(取决于不同的版本, 有可能是 ATMega 16U2 或 8U2)作为 USB 电缆和主控制器的串行 USART 引脚 间的接口。使用 ATMega 32U4 作为主控制器的 Arduino Leonardo 已经内建了 USB 接口,因此就不需要第二个微控制器了。在更老的 Arduino 板卡上,则使用了一 片 FTDI 出品的 USB 转串口芯片,作为 ATMega 的串行 USART 端口和 USB 口 之间的接口。 5
- 28.Arduino 魔法书:实现梦想的工具和技术 引用自:©2013 Atmel Corporation. 保留所有权利 6 图 1-2 AVR ISP MKII 编程器 【通用 I/O 和模数转换器(ADC)】 在搭建项目期间,在 Arduino 上你最关注的部分就是通用 I/O 和模数转换器 引脚。所有的这些引脚都可以通过你编写的程序来被独立地寻址。它们都可以用 作数字输入、输出。ADC 引脚还可以作为模拟输入端,用来测定 0~5V 的电压 (通常来自电阻式传感器)。在这些引脚中,有许多还可以被复用作其他功能,你 将会在你之后的项目中去探索。这些特殊的功能包括各种通信接口、串口、脉冲 宽度调制输出及外部中断。 【电源】 对于绝大部分项目,你只会用到由 USB 电缆提供的 5V 电源。然而,当你 打算让你的项目脱离一台计算机的时候,还有其他供电方法可选。Arduino 可以 通过直流(DC)圆孔插座或者 Vin 引脚接受 6~20V(推荐 7~12V)的供电。 Arduino 内建了 5V 和 3.3V 的稳压器。 5V 用于板上的所有逻辑电路。换句话说,在切换一个数字 I/O 引脚时, 你实际上是在 5V 和 0V 间切换。 3.3V 被引出到一个引脚上,用来适配 3.3V 的扩展板和外部电路。 Arduino启动引导程序和固件设置 启动引导程序(bootloader)是一段代码,它保存在 Arduino 主 MCU 的程 序存储器的保留空间中。通常情况下,AVR 微控制器需要通过一个 ICSP 来编 程,它通过串行外设接口(SPI)来与微控制器通信。通过这种方式来编程十 分简单,但用户必须要有一个硬件编程器,比如 STK500 或者 AVR ISP MKII
- 29.第1章 让你的 Arduino 闪烁 编程器(见图 1-2)。 当你首次启动 Arduino 板卡时,它会进入启动引导程序,然后运行几秒。 如果在这段时间里,MCU 的 UART(串口)从 IDE 接收到了编程命令,它就 会将你发送给它的程序烧写至 MCU 其余的程序存储器中。如果没有接收到编 程命令,它就会开始执行你最近烧写至其余程序存储器中的程序。 当你从 Arduino IDE 发送一个“烧写”指令时,它会命令 USB 转串口芯 片(在 Arduino Uno 上是一片 ATMega 16U2 或者 8U2)复位主 MCU,从而强 制其进入启动引导程序。然后,你的计算机立即开始发送程序内容,而 MCU 也已经准备好从它的 UART 口(在 USB-串口转换器的协助下)接收程序。 启动引导程序是很棒的,因为它使我们能够不用添加额外的硬件而通过 USB 接口方便地编程。然而,它也有以下两个缺点。 首先,它占用了宝贵的程序存储空间。如果你编写了一个复杂的程序, 则由启动引导程序所占用的约 2KB 的空间就会变得十分宝贵。 其次,使用启动引导程序意味着你的程序总是需要在启动时延迟几秒, 来让启动引导程序检测编程请求。 如果你拥有一个编程器(或者另外一个可以被编程从而成为一个编程器的 Arduino),那么你可以从 ATMega 中移除启动引导程序,将编程器连接到 ICSP 插头,然后使用 IDE 中的 File-Upload Using Programmer 命令来为其编程。 Arduino 板卡 本书不可能涵盖所有可用的 Arduino 板卡,因为它们太多了,而且制造商们 还在不断地发布具有不同特性的新板卡。下面介绍一些官方 Arduino 板卡的主要 特性。 Uno(见图 1-3)是 Arduino 中的旗舰,在这本书中将大量使用这块板卡。 它采用了一片 16U2 USB-串口转换器芯片,另有一片 ATMega 328p 作为主 MCU。 它有双列直插(DIP)和表面贴装(SMD)两个版本(这决定了 MCU 是否可拆 卸)。 7
- 30.引用自:Arduino,www.arduino.cc Arduino 魔法书:实现梦想的工具和技术 图 1-3 Arduino Uno Leonardo(见图 1-4)采用了内建 USB 接口的 32U4 作为主微控制器。因此, 它不需要第二个 MCU 来作为串口-USB 转换器。这不但降低了成本,还使得你 能够做一些独特的事情,比如模拟游戏摇杆或者键盘,而不仅仅是一个简单的串 口设备。你将在第 6 章“USB 和串口通信”中学习如何使用这些特性。 引用自:Arduino,www.arduino.cc 8 图 1-4 Arduino Leonardo Mega2560(见图 1-5)采用了一片 ATMega 2560 作为主 MCU,它具有 54 个通用 I/O 口,使你能连接更多的设备。Mega 也拥有更多的 ADC 通道及 4 个硬 件串口(而不像 Uno 那样只有一个串口)。
- 31.让你的 Arduino 闪烁 引用自:Arduino,www.arduino.cc 第1章 图 1-5 Arduino Mega 2560 引用自:Arduino,www.arduino.cc 与其他采用 8 位 AVR MCU 的 Arduino 变种不同的是,Due(见图 1-6)使 用了一片 32 位的 ARM Cortex-M3 SAM3X MCU。Due 还提供了更高精度的 ADC、 可选分辨率的脉冲宽度调制(PWM)、数模转换器(DAC)、一个 USB Host 连 接器及 84MHz 的时钟频率。 图 1-6 Arduino Due Nano(见图 1-7)可以直接安装到一块面包板中,小巧的尺寸使其非常适用 于更加精巧的项目中。 9
- 32.Arduino 魔法书:实现梦想的工具和技术 引用自:Cooking Hacks, www.cookinghacks.com 图 1-7 Arduino Nano Mega ADK(见图 1-8)与 Mega 2560 非常类似,区别在于它的 USB Host 功能,这使其能够连接到 Android 手机,从而与你编写的手机应用通信。 引用自:Arduino,www.arduino.cc 10 图 1-8 Arduino Mega ADK LilyPad(见图 1-9)十分独特,因为它可被缝进衣物之中。利用导电缝纫线, 你可以为其连接可缝制的传感器、LED 等。为了控制尺寸,你需要使用 FTDI 电缆为它编程。
- 33.让你的 Arduino 闪烁 引用自:Arduino,www.arduino.cc 第1章 图 1-9 LilyPad Arduino 引用自:3D Robotics, Inc.,www.3drobotics.com 正如本书前言中所述,Arduino 是一个开源硬件。因此,你可以找到各种各 样的“Arduino 兼容型”设备,它们都可以与 Arduino IDE 协同工作,也都可以 用来完成本书中的项目。一些比较流行的第三方板卡包括 Seeeduino、adafruit 32U4 接线板及 SparkFun Pro Mini Arduino 板卡等。许多第三方板卡通常是为特 定应用设计的,并且已经板载了一些额外的功能。比如,ArduPilot 是一块自动 飞控板,用于自主控制的 DIY 四轴飞行器(见图 1-10)。你甚至可以在消费电子 产品中找到 Arduino 兼容型电路的身影,比如 MakerBot Replicator 和 Replicator 2 3D 打印机。 图 1-10 四轴飞行器和 ArduPilot Mega 控制器 11
- 34.12 Arduino 魔法书:实现梦想的工具和技术 创建你的第一个程序 现在你已经了解了要在本书中使用的硬件,可以安装软件并运行第一个程序 了。首先要将 Arduino 软件下载并安装到你的计算机中。 下载并安装 Arduino IDE 访问 Arduino 网站 www.arduino.cc 并从“Download”页面下载最新版的 IDE (见图 1-11)。 图 1-11 Arduino.cc 下载页面 完成下载之后将其解压,在其中你会找到 Arduino IDE。Windows 下新版的 IDE 还提供了安装包格式,你可以直接下载并运行,而不需要下载一个 ZIP 文件。
- 35.第1章 让你的 Arduino 闪烁 运行 IDE 并连接 Arduino IDE 已经下载完成并可以运行了,你可以将 Arduino 通过 USB 线连接到计 算机,如图 1-12 所示。Mac 和安装了 Linux 操作系统的计算机(几乎)可以自 动安装驱动程序。 图 1-12 Arduino Uno 通过 USB 连接到了一台计算机 如果你使用的是 OS X,则在第一次插入 Uno 或者 Mega 2560 时,会弹出一 个已添加新网络设备的提示。单击“Network Preferences” (网络偏好设置)按钮。 在新窗口中,单击“Apply”按钮。尽管这块板卡在网络设备列表中显示为“Not Configured ”( 未 配 置 ), 但 它 已 经 可 以 使 用 了 。 现 在 就 可 以 退 出 “ System Preferences”(系统偏好设置)了。 如果在安装了 Windows 操作系统的计算机上使用新版本的 Arduino,则你可 能需要安装驱动程序。如果你使用的不是安装了 Windows 操作系统的计算机, 则可以跳过下列步骤。如果你使用 Windows 安装包安装了 IDE,则下列步骤已 经自动完成了。如果你在安装了 Windows 操作系统的计算机上下载了 ZIP 压缩 13
- 36.14 Arduino 魔法书:实现梦想的工具和技术 包,则需要遵循下列步骤。 在安装了 Windows 操作系统的计算机上,请遵循以下步骤来安装驱动程序 (以下步骤改编自 Arduino.cc 网站)。 1.等待自动安装进程失败。 2.打开“开始”菜单,用鼠标右键单击“我的电脑”并选择“属性”。 3.选择“设备管理器”。 4.在“端口(COM 和 LPT)”项下找到你连接的 Arduino。 5.用鼠标右键单击它,选择“更新驱动程序软件”。 6.选择“浏览计算机以查找驱动程序软件”。 7.从你刚下载的 Arduino IDE 目录中的 driver 目录下选择恰当的驱动程序 (不是 FTDI 驱动程序目录)。 8.Windows 会自动完成驱动程序的安装。 现在,运行 Arduino IDE,你就可以将第一个程序烧写至 Arduino 中了。为 了确保一切都工作正常,你可以烧写 Blink 示例程序,它会让板载 LED 闪烁。 绝大多数 Arduino 都有一个连接到 13 号引脚的 LED。定位到 File-Example-Basic 菜单并单击 Blink 程序,会打开一个新的 IDE 窗口,其中是已经写好的 Blink 程 序。首先,你要用这个示例程序为 Arduino 编程,然后分析这个程序,理解其中 的重要部分,这样你就可以在第 2 章中开始编写自己的程序了。 在烧写程序之前,你需要告诉 IDE 你将哪种 Arduino 连接到了哪个端口。在 Tools-Board 菜单下选择正确的板卡。在这个示例中使用的是 Uno,但如果你使 用的是不同的板卡,则请选择它(假设它也有一个连接到 13 号引脚的 LED)。 在编程之前的最后一步是告诉 IDE 你的板卡连接到了哪个端口。定位到 Tools-Serial Port 菜单并选择恰当的端口。在 Windows 操作系统下,端口会显示 为 COM*,其中的“*”是一个表示串口编号的数字。 提示 如果你在计算机上连接了多个串口设备,则可以尝试拔掉你的板 卡,看哪个 COM 端口从菜单中消失了,然后将它插回去并选择那个 COM 端口。 在安装了 Linux 操作系统的计算机和 Mac 上,串口会显示为类似于 /dev/tty.usbmodem*或/dev/tty.usbserial*的形式,其中“*”是字母 或数字组成的字符串。
- 37.第1章 让你的 Arduino 闪烁 现在你终于可以烧入第一个程序了。单击 IDE 左上方的 Upload 按钮( )。 IDE 下方的状态栏会在编译和烧写程序时显示一个进度条。烧写完成后,Arduino 上的黄色 LED 就会每秒闪烁一次。祝贺你!你刚刚烧写了第一个 Arduino 程序。 分析你的第一个程序 花点时间分析这个 Blink 程序,就可以让你了解一个 Arduino 程序的基本结 构。参见图 1-13,其中的编号对应下列清单。 1 2 3 4 5 6 7 8 9 10 图 1-13 Blink 程序的各个部分 下面逐行讲解了这段代码是如何工作的。 1.这是一个多行注释。注释对文档化你的代码是非常重要的。所有写在这 些符号之间的内容都不会被编译,甚至根本不会被 Arduino 看到。多行注释以 “/*”开头并以“*/”结尾。多行注释通常在你需要说很多话时使用(比如这个 15
- 38.16 Arduino 魔法书:实现梦想的工具和技术 程序的描述)。 2.这是一个单行注释。当你在任何行中插入“//”时,编译器会忽略从这 个符号起直到行尾的所有内容。这对标注特定的一行代码是非常好的,在你感觉 某些代码可能导致问题时,也可以使用这个符号将其“注释掉”。 3.这是一个变量声明。变量是在 Arduino 的内存中的一块用于保存信息的 区域。变量有不同的类型。在这里,它的类型是 int,意味着它可以保存一个整 数(integer)。在这里,一个被称为 led 的变量的值被设置为 13,代表与 LED 连接的 Arduino Uno 引脚。在之后的程序中,需要控制 13 号引脚时就可以简单 地使用 led 来表示。设立变量是很有用的,如果你之后将 LED 连接到了不同的 I/O 引脚,则只需修改一行代码,而其余的代码仍能正常工作。 4.void setup()是两个必须包含在每个 Arduino 程序中的函数之一。函 数是一段执行特定任务的代码。包含在 setup()函数花括号间的代码在每次程 序启动时都会执行一次。这对一些一次性的设置是很有用的,比如设置引脚方向、 初始化通信接口,等等。 5.Arduino 的数字引脚可以工作在输入或输出模式。要配置它们的方向, 可使用 pinMode()函数。这个命令接收两个参数。参数用于给出如何操作的命 令信息。参数通常位于命令之后的圆括号之中。pinMode 的第一个参数用于指 定要设置方向的引脚是哪一个。你在之前的程序中定义了 led 变量,即通知了 这条命令要设置 13 号引脚的方向。第二个参数设置了引脚的方向:INPUT(输 入)或 OUTPUT(输出)。引脚在默认情况下是输入模式,如果你想让其作为输 出功能,则需要显式地将其设置为输出模式。因为你想点亮一个 LED,所以必 须将 led 引脚设置为输出(电流从 I/O 引脚中流出)模式。注意你只需要这样 做一次。它在整个的程序中都会保持输出状态,直到你手动将其改为输入。 6.Arduino 程序中第二个必要的函数是 void loop()。loop()函数的内 容在 Arduino 上电之后就会不断地重复执行。即使你只需要把一些东西在 Arduino 启动时执行一次,也必须包含 loop()函数,但你可以将其留空。 7.digitalWrite()用于设置一个输出引脚的状态。它可以将引脚设置为 5V 或 0V。当将一个 LED 和电阻连接到引脚时,将引脚设置为 5V 就会点亮 LED。 (你会在第 2 章中进一步学习这些。)digitalWrite()的第一个参数是你想要 操作的引脚。第二个参数是你想要设置的值,可以是 HIGH(5V)或者 LOW(0V)。 引脚的状态会保持原状,直到它在代码中被改变。 8.delay()函数接收一个参数:延时时间的毫秒数。当调用 delay()时, Arduino 会在指定的时间内停止一切工作。在这个例子中,你将程序延时 1000ms,
- 39.第1章 让你的 Arduino 闪烁 即 1s。这就使得 LED 在执行下一条指令前保持原状态 1s。 9.这里,digitalWrite()通过将引脚状态设置为 LOW 来使 LED 熄灭。 10.我们再次延时 1s,将 LED 保持在熄灭状态,然后重新开始循环来再次 点亮它。 这就是整个过程。如果你还没有完全理解代码,则也不要担心。随着你在 之后的章节中接触到更多的代码,你就会越来越熟练地掌握程序流程并编写自 己的代码。 本章小结 在本章你学到了如下内容: 组成 Arduino 板卡的所有器件; Arduino 的启动引导程序如何使你能够通过 USB 连接烧写 Arduino 固件; 各种不同 Arduino 板卡间的区别; 如何将 Arduino 连接到你的计算机并安装软件; 如何烧写并运行你的第一个程序。 17
- 40.18 Arduino 魔法书:实现梦想的工具和技术 第2章 数字输入、输出和脉冲宽度调制 本章所需的器件: Arduino Uno 小号面包板 跳线 10kΩ 电阻 220Ω 电阻(×3) USB 电缆 按键 5mm 单色 LED 5mm 共阴极 RGB LED 本章的代码和数字化内容 本章的代码、视频及其他数字化内容可以在以下网址找到: www.exploringarduino.com/content/ch2。 另 外 , 所 有 的 代 码 都 可 以 在 www.wiley.com/go/exploringarduino 网 页 的 “Download Code”标签中找到。在第 2 章中提供下载的代码根据其在本章中的名 称单独命名。 正如你在第 1 章学到的,让一个 LED 闪烁确实很棒,而让 Arduino 微控制 器平台变得如此有用的原因则是这个系统可以同时具备输入、输出的能力。通过 二者的组合,你的机会几乎是无穷的。举例来说,你可利用一个磁簧开关在门打
- 41.第2章 数字输入、输出和脉冲宽度调制 开时播放音乐、制作一个电子锁箱或者制作一个乐器。 在本章,你要就要开始学习搭建这种项目所需的技巧。你会探索 Arduino 的 数字输入、输出功能,学习上拉和下拉电阻及如何控制数字输出。绝大多数 Arduino 没有模拟输出,但在很多情境下都可以通过脉冲宽度调制技术来模拟它。 你会在本章学习如何生成脉冲宽度调制信号。你还将学到如何为数字按键消除抖 动,这是一个读取用户输入时的关键技巧。完成本章后,你将能够制作一个可控 的 RGB(红、绿、蓝)LED 夜灯并为其编程。 注意 你可以跟随一个视频来学习数字输入、输出、抖动消除及脉冲宽度 调制(PWM):http://kuangqi.me/arduino/'>http://kuangqi.me/arduino/