本书主要通过了解,学习,使用Arduino开源模块,让读者在实战过程中学习并掌握基于AVR8位单片机的项目开发技巧。
在2011年举行的Google I/O开发者大会上,Google发布了基于Arduino的Android Open Accessory标准和ADK工具,这使得大家对Arduino的前景十分看好。Phillip Torrone大胆地预测Google将用Android+Arduino的形式掀起自己的“Kinect模式”浪潮。目前,国内关注Arduino的人越来越多,但介绍Arduino的书籍却很少。笔者由于工作的关系,接触Arduino较早,所以希望通过自己的努力让更多的人了解Arduino,在近一年的时间里,通过不断学习、查阅Arduino相关知识,终于完成了书稿的撰写工作。但在书稿完成之后,心中却一直忐忑不安,Arduino是一个介于软件与硬件之间的产品,系统性不是很强,加上笔者水平有限,拙著中一定存在不少的缺点与漏洞,为此,笔者先为书中的不足之处致以真诚的歉意,同时诚挚地欢迎广大读者提出宝贵的意见并不吝赐教。
本书的内容及面向的读者
Arduino是一个注重实际动手操作的产品,所以本书以实际应用为纽带将各个章节联系起来。本书共9章,首先介绍Arduino的一些基础知识,接着针对具体应用介绍了一些扩展板以及Arduino扩展库,最后应用之前的内容完成了具有视频监控功能的履带车、遥控机械臂以及双足机器人的制作。
因为Arduino本身具有简单易用的特点,所以本书面向的读者是所有有兴趣使用Arduino进行项目开发的人。
当然,根据读者的情况不同,本书的阅读方式也不同。
如果读者是一个之前没有进行过单片机开发也没有进行过软件开发的人,现在想使用Arduino来实现自己的一些想法,那么首先要阅读本书的前两章,了解一些简单的编程思想以及程序结构,接下来阅读第3章的目录,了解Arduino都有什么基本函数,具体内容可以先不用看,当你之后使用这些函数遇到问题时再回过头来看一看相应的函数说明。然后将Arduino接到你的电脑上,翻开第4章,根据书中的内容,边学习边实践,4.5节可以跳过不看。第5~7章介绍了Arduino周边的资源,以便帮助你尽快地实现想法,这3章的内容也可以采用跳跃式的阅读方式。第8、9章会告诉你前3章的内容是如何结合起来的,建议按照书中的内容至少动手完成一个项目的制作。
如果读者之前进行过AVR单片机的开发,想了解Arduino一些底层的知识,那么第2章的知识就可以跳过了,在简单地翻阅第3章的内容后,直接进入第4章,把Arduino连到电脑上实践一下,再回过头阅读第3章中关于Arduino的基本函数,结合自身已有的AVR单片机的知识了解Arduino底层的工作机制。需要说明的是,这里需要读者自己花一些精力,可能还需要学习一些C++方面的知识。第5章对Arduino硬件原理进行了详细介绍,若读者之前学习过,这一章可以选择性学习。第6章介绍的是Arduino的扩展库,如果读者也想开发一些Arduino扩展板,并以库的形式提供扩展板的软件资源,那么建议先学习最后一节,再从6.1节开始学习,深入地了解这些扩展库是如何与Arduino结合在一起的。至于剩下几章的内容,如果用开发单片机的思路来完成也是不难的,所以阅读的重点是看看如何用Arduino的思路进行项目的制作。
如果读者之前是做纯电脑软件开发工作的,即使用C++非常熟练,那么在阅读完第1章后,可以直接跳到第4章,感受一下Arduino给纯软件开发人员带来的那种完成硬件制作的感觉,然后仔细阅读第5章,看看目前都有哪些扩展板可以为自己所用,控制电机、控制液晶之类的,硬件知识哪怕我们不用,也还是要了解一些的。接下来,对于第6章,可以仔细阅读一下与硬件关系不太大的扩展库以及如何创建自己的库,在今后底层硬件库不断丰富完善的情况下,开发一些注重应用、与底层关系不是太紧密的库时,这就是我们的用武之地。第7~9章的内容会告诉我们前面的知识是如何结合起来的—用纯软件的思路,同样建议按照书中的内容至少动手完成一个项目的制作,做纯软件开发工作的人开发硬件也是很容易的。
致谢
首先要感谢本书的策划张国强先生,是他对Arduino的关注促成了本书的出版,同时在笔者撰写书稿时他也对本书提出了宝贵的写作建议,并对书稿进行了仔细审阅。
其次要感谢让我了解Arduino的庄明波先生,他不但在技术上给予了我很多的指导,同时也无私地提供了大量的Arduino扩展板的资料以及实物,供我在Arduino的程序调试中使用,同时与我共同探讨技术上遇到的问题。
最后要感谢现在正捧着这本书的您,感谢您肯花费时间和精力阅读本书,由于时间有限,书中难免存在疏漏与错误,诚恳地希望您批评指正,您的意见和建议将是我巨大的财富。希望在Arduino的领域结识更多的朋友。
前言
第一篇 基础篇
第1章 初识Arduino 2
1.1 Arduino的历史 2
1.2 Arduino的家族 3
1.3 Arduino的资源 6
1.4 Arduino的开发环境 9
1.5 添加新硬件及设置开发环境 9
1.6 Arduino开发环境的应用 14
第2章 编写Arduino程序 16
2.1 绘制流程图 16
2.1.1 流程图基本符号 16
2.1.2 流程图的三种基本结构 17
2.2 C语言的标识符与关键字 18
2.2.1 标识符 18
2.2.2 关键字 18
2.2.3 运算符 19
2.2.4 分隔符 21
2.2.5 常量 21
2.2.6 注释符 21
2.3 控制语句 21
2.3.1 if语句 21
2.3.2 switch语句 22
2.3.3 while语句 23
2.3.4 do-while语句 24
2.3.5 for语句 25
2.3.6 break语句 26
2.3.7 continue语句 26
2.3.8 goto语句 26
2.4 程序结构 27
第3章 Arduino的基本函数 29
3.1 数字I/O 30
3.1.1 pinMode(pin,mode) 30
3.1.2 digitalWrite(pin,value) 31
3.1.3 digitalRead(pin) 32
3.2 模拟I/O 33
3.2.1 analogReference(type) 33
3.2.2 analogRead(pin) 33
3.2.3 analogWrite(pin, value) 34
3.3 高级I/O 37
3.3.1 shiftOut(dataPin,clockPin, bitOrder,val) 37
3.3.2 pulseIn(pin,state,timeout) 38
3.4 时间函数 39
3.4.1 millis( ) 39
3.4.2 delay(ms) 40
3.4.3 delayMicroseconds(us) 40
3.5 数学库 41
3.5.1 min(x,y) 41
3.5.2 max(x,y) 41
3.5.3 abs(x) 41
3.5.4 constrain(amt,low,high) 41
3.5.5 map(x,in_min,in_max,out_min, out_max) 41
3.5.6 三角函数 42
3.6 随机数 42
3.6.1 randomSeed(seed) 42
3.6.2 random(howsmall,howbig) 42
3.7 位操作 43
3.8 中断函数 43
3.8.1 interrupts( )和noInterrupts( ) 43
3.8.2 attachInterrupt(interrupt,function,mode) 43
3.9 串口通信 45
3.10 SPI接口 48
3.10.1 SPI接口概述 48
3.10.2 SPI接口数据传输 48
3.10.3 SPI类及其成员函数 49
第4章 Arduino硬件平台 52
4.1 Arduino的原理图 52
4.2 串行通信口的使用 55
4.2.1 实例功能 56
4.2.2 硬件电路 56
4.2.3 程序设计 56
4.3 数字I/O口的使用 58
4.3.1 实例功能 59
4.3.2 硬件电路 59
4.3.3 程序设计 59
4.4 模拟I/O口的使用 61
4.4.1 实例功能 61
4.4.2 硬件电路 61
4.4.3 程序设计 62
4.5 烧写引导程序 62
4.5.1 下载器AVRISP 63
4.5.2 AVR Studio 64
4.5.3 烧写引导程序 65
第二篇 模块篇
第5章 Arduino基本扩展模块 68
5.1 L293 Motor Shield 68
5.1.1 直流电机的工作原理 68
5.1.2 H桥驱动电路 70
5.1.3 线性放大调速原理 71
5.1.4 PWM调速原理 72
5.1.5 L293 Motor Shield的原理 72
5.1.6 L293 Motor Shield的应用 74
5.1.7 程序设计 75
5.1.8 程序分析 76
5.1.9 程序的精练 77
5.2 Input Shield 78
5.2.1 Input Shield原理图 79
5.2.2 Input Shield的实例 79
5.2.3 程序设计 80
5.2.4 程序分析 81
5.2.5 使用摇杆控制直流电机转速 81
5.3 LCD Keypad Shield 83
5.3.1 液晶显示原理 83
5.3.2 标准1602液晶模块 83
5.3.3 1602液晶模块控制方式 84
5.3.4 LCD Keypad Shield原理图 87
5.3.5 LCD Keypad Shield应用实例 89
5.3.6 程序设计 89
5.3.7 程序分析 92
5.3.8 Arduino的液晶控制方式 93
5.3.9 “hello Arduino!” 94
5.4 Ethernet Shield 97
5.4.1 Ethernet Shield原理图 97
5.4.2 W5100芯片介绍 97
5.4.3 W5100芯片的寄存器 101
5.4.4 W5100芯片的使用 105
5.4.5 Ethernet Shield应用实例 105
5.4.6 程序设计 106
5.5 I/O扩展板 109
5.5.1 Xbee传感器扩展板V5 109
5.5.2 伺服电机控制 110
5.5.3 伺服电机应用实例 111
5.5.4 Interface shield 114
5.5.5 RGB LED Module 114
5.5.6 RGB LED Module应用实例 118
5.5.7 程序的精练 123
第6章 Arduino的扩展库 126
6.1 Arduino扩展库介绍 126
6.1.1 Arduino扩展库的作用 126
6.1.2 Arduino扩展库的应用 126
6.2 对象和类 130
6.2.1 类的定义 130
6.2.2 对象的创建及成员函数的调用 131
6.2.3 对象的初始化和构造函数 132
6.2.4 函数的重载 133
6.2.5 析构函数 133
6.3 LiquidCrystal库 134
6.3.1 构造函数 136
6.3.2 command( )和write( ) 139
6.3.3 begin( ) 140
6.3.4 clear( ) 142
6.3.5 home( ) 142
6.3.6 setCursor( ) 142
6.3.7 noDisplay( )和display( ) 143
6.3.8 cursor( )和noCursor( ) 143
6.3.9 blink( )和noBlink( ) 143
6.3.10 autoscroll( )和
noAutoscroll( ) 144
6.3.11 scrollDisplayLeft( )和scrollDisplayRight( ) 144
6.3.12 print( ) 145
6.4 Ethernet库 146
6.4.1 EthernetClass类定义 146
6.4.2 Server类定义 148
6.4.3 Server类构造函数 148
6.4.4 Server类成员函数 148
6.4.5 Client类定义 152
6.4.6 Client类构造函数 152
6.4.7 Client类成员函数 153
6.5 SoftwareSerial库 158
6.5.1 构造函数 159
6.5.2 begin( ) 160
6.5.3 read( ) 160
6.5.4 print( )和println( ) 161
6.5.5 使用限制 164
6.6 EEPROM库 165
6.6.1 read( ) 165
6.6.2 write( ) 166
6.7 Wire库 166
6.7.1 IIC总线概述 166
6.7.2 TwoWire类定义 167
6.7.3 begin( ) 168
6.7.4 requestFrom( ) 168
6.7.5 available ( ) 169
6.7.6 receive( ) 169
6.7.7 beginTransmission( ) 170
6.7.8 endTransmission( ) 170
6.7.9 send( ) 171
6.7.10 onReceive( ) 172
6.7.11 onRequest( ) 173
6.8 Servo库 174
6.8.1 构造函数 175
6.8.2 attach() 176
6.8.3 write( ) 177
6.8.4 writeMicroseconds( ) 177
6.8.5 read( ) 178
6.8.6 readMicroseconds( ) 178
6.8.7 attached( ) 178
6.8.8 detach( ) 179
6.9 Stepper库 179
6.9.1 步进电机概述 179
6.9.2 步进电机的基本参数 180
6.9.3 步进电机的优缺点 181
6.9.4 步进电机的工作原理 181
6.9.5 步进电机的控制电路 183
6.9.6 Stepper类定义 185
6.9.7 构造函数 186
6.9.8 setSpeed( ) 188
6.9.9 step( ) 188
6.10 TLC5940库 189
6.10.1 Tlc5940类的定义 190
6.10.2 init( ) 191
6.10.3 update( ) 192
6.10.4 set( ) 193
6.10.5 get( ) 194
6.10.6 setAll( ) 194
6.10.7 clear( ) 195
6.11 OneWire库 195
6.11.1 单总线的结构 195
6.11.2 单总线控制方式 195
6.11.3 单总线信号形式 196
6.11.4 OneWire类 198
6.11.5 构造函数 200
6.11.6 reset( ) 200
6.11.7 write_bit( ) 201
6.11.8 read_bit( ) 202
6.11.9 write( ) 202
6.11.10 read( ) 203
6.11.11 select( ) 203
6.11.12 skip( ) 204
6.12 XBee库 204
6.12.1 XBee类定义 204
6.12.2 构造函数 205
6.12.3 begin( ) 206
6.12.4 readPacket( ) 206
6.12.5 send( ) 209
6.13 创建自己的库 210
6.13.1 库的功能—Morse 210
6.13.2 MorseCode类的定义 213
6.13.3 MorseCode类的成员函数 214
6.13.4 MorseCode库的使用 222
6.13.5 关键字的定义 223
第7章 无线模块的应用 224
7.1 APC220 224
7.1.1 APC220性能指标 224
7.1.2 模块引脚定义 226
7.1.3 模块的使用 226
7.1.4 注意事项 227
7.2 DFduino wireless 228
7.2.1 DFduino wireless性能指标 228
7.2.2 模块引脚定义 229
7.2.3 模块的使用 229
7.3 Bluetooth V3 231
7.3.1 Bluetooth V3性能指标 231
7.3.2 模块引脚定义 232
7.3.3 模块的使用 232
7.4 XBee和XBee PRO 234
7.4.1 XBee及XBee PRO性能指标 235
7.4.2 模块引脚定义 235
7.4.3 模块的使用 236
7.4.4 程序设计 236
第三篇 应用篇
第8章 打造自己的遥控履带车 242
8.1 履带车的驱动 242
8.1.1 实现功能 242
8.1.2 所需器材 242
8.1.3 硬件连接 243
8.1.4 程序设计 246
8.1.5 MotorCar类 251
8.1.6 类的应用 255
8.2 添加感知器件 257
8.2.1 实现功能 257
8.2.2 所需器材 257
8.2.3 器材介绍 257
8.2.4 硬件连接 258
8.2.5 程序设计 258
8.3 添加无线模块 261
8.3.1 实现功能 261
8.3.2 所需器材 261
8.3.3 硬件连接 261
8.3.4 程序设计 262
8.4 制作遥控器 264
8.4.1 实现功能 264
8.4.2 所需器材 265
8.4.3 硬件连接 265
8.4.4 程序设计 265
8.5 履带车遥控调速 267
8.5.1 实现功能 267
8.5.2 程序设计 267
8.6 添加无线摄像头 272
8.6.1 实现功能 272
8.6.2 所需器材 272
8.6.3 器材介绍 272
8.6.4 硬件连接 273
8.6.5 程序设计 277
8.7 环境信息获取器件 283
8.7.1 实现功能 283
8.7.2 所需器材 284
8.7.3 器材介绍 284
8.7.4 硬件连接 285
8.7.5 程序设计 286
第9章 仿生机器人 295
9.1 遥控机械臂 295
9.1.1 实例功能 295
9.1.2 器材列表 295
9.1.3 搭建硬件环境 296
9.1.4 安装控制部分 298
9.1.5 Wii游戏手柄 298
9.1.6 机械臂程序设计 300
9.2 双足机器人 304
9.2.1 实例功能 304
9.2.2 器材列表 304
9.2.3 搭建硬件环境 305
9.2.4 双足机器人程序设计 307
9.2.5 PC调试软件编写 310
9.2.6 双足机器人的调试 317
附录A Arduino引脚与AVR单片机管脚对应关系 319
附录B Arduino扩展板 320
附录C 其他可扩展模块 322
想象一下,一个网页只有HTML,没有CSS,那就是素颜和上妆的区别。而一个网页只有CSS,没用CSS3,那就是马车和汽车的区别!汽车代
ADOBE中文版LLLUSTRATOR教程 本书特色 《中文版adobeillustrator教程(附光盘高等院校多媒体专业通用教材)》编著者赵君韬、...
《企业内部控制从懂到用》内容简介:本书将作者近20年内控咨询、培训及与企业各级管理人员沟通交流的经验进行归纳沉淀,通过完备的
OpenGL ES 3.x游戏开发-(下卷) 本书特色 本书共分14章,内容涵盖了从OpenGL ES 3.x着色器的使用技巧到高级光影效果以及物理模拟问题的解...
《画笔之下:插画设计入门教程》内容简介:这是一本面向初学者和插画爱好者的教程书,书中将插画设计的思维、技法、理论穿插于六个
《网络空间测绘技术与实践:让互联网情报服务于网络安全》内容简介:这是一本对网络空间测绘技术原理、工具使用、最佳实践进行全面
《一场风花雪月的盐城》内容简介:黄海潮涌,诗与远方牵手;魅力水乡,谱写文旅新篇。盐城故事,从盐开始,与时俱进,日新月异。今
《神经网络》的主要内容有:神经网络的概念,神经网络的分类与学习方法,前向神经网络模型及其算法,改进的BP网络及其控制、辨识
《朱爱朝二十四节气自然笔记》内容简介:在带领孩子做自然观察和自然笔记的长期课程实践基础上,朱爱朝老师以二十四节气为序,结合
《时装设计元素:调研与设计》是与设计相关的重要元素。《时装设计元素:调研与设计》通过一系列的章节,讲解了一个设计师首先可能
Excel VBA实用教程 本书特色 胡建华、楼吉林主编的《excel vba实用教程(高等院校计算机技术与应用系列规划教材)》共分为八章,主要内容包括vba概...
《数据化运营速成手册》内容简介:《数据化运营速成手册》用于提升互联网公司员工的数据应用能力,即数据化运营能力。首先,从最常
《Web应变之道》基于Web实战经验、规范组织及社区论坛,分析Web现状、问题和挑战,紧扣Web的变化性与不确定性,提供方法论的指导
Adobe Photoshop CS6中文版经典教程-(彩色版)-(附光盘) 本书特色 《adobe photoshop cs6中文版经典教程(附光盘彩色版)》...
《PPT演示之道:写给非设计人员的幻灯片指南(全彩)》从设计原则和思路出发,帮助读者掌握制作PPT的精髓,并在其中穿插了实用的功能
网络媒体篇-中国互联网20年 本书特色 本书致力于记录中国网络媒体发展二十年的历史,揭示其发展成就,挖掘其发展特点,总结其发展经验,鉴往知来,以期更好的理解当下...
《老老恒言》内容简介:《老老恒言》是一部汇集清以前各家养生思想,并结合作者自己的切身体会,总结编纂而成的老年养生专著,号称
移动学习理论与实践 本书特色 《移动学习理论与实践》通过对移动学习的理论分析,探讨了与其紧密相关的技术问题及实现模式,并通过案例详细介绍了移动学习系统的构建过程...
算法设计,ISBN:9787302143352,作者:(美)克林伯格(Kleinberg,J.),()塔多斯(Tardos,E.)著,张立昂,屈婉玲译目录
内容全面,详尽地剖析了WindowsPE文件格式的原理及其编程技术,涉及安全领域的各个方面和Windows系统的进程管理和底层机制;实战