Arduino项目开发:物联网应用(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-07 01:52:26

点击下载

作者:李永华、曲明哲

出版社:清华大学出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Arduino项目开发:物联网应用

Arduino项目开发:物联网应用试读:

作者简介

李永华 现执教于北京邮电大学,拥有超过10年的嵌入式开发经验,目前致力于物联网、云计算与大数据的研究工作。在教学中善于以兴趣为导向,激发学生的创造性;以素质为基础,提高自身教学水平;以科研为手段,促进教学理念的转变。在研发及教学实践中指导学生实现300个创新案例,参与了30余项国家级与企业横向课题的研究工作,在国内外学术期刊及会议发表论文60余篇,申请专利40余项,出版教材10余部。

内容简介

本书系统论述了Arduino开源硬件的架构、原理、开发方法及13个完整的项目设计案例。全书共14章,内容包括Arduino设计基础、绘图仪项目设计、智能行李箱项目设计、导游自拍照无人机实验项目设计、Arduino Phone项目设计、智能快递箱项目设计、智能机房环境监控项目设计、手势控制机械爪项目设计、联网型烟雾报警器项目设计、智能手写数字识别项目设计、智能垃圾桶项目设计、空中鼠项目设计、解魔方项目设计和智能计步器项目设计。

在编排方式上,全书侧重对创新产品的项目设计过程进行介绍,分别从需求分析、设计与实现等角度论述硬件电路、软件设计、传感器和功能模块等,并剖析产品的功能、使用、电路连接和程序代码等。

本书可作为高校电子信息类专业“开源硬件设计”“电子系统设计”“创新创业”等课程的教材,也可作为创客及智能硬件爱好者的参考用书,还可作为从事物联网、创新开发和设计专业人员的技术参考书。前言PREFACE

物联网、智能硬件和大数据技术给社会带来了巨大的冲击,个性化、定制化和智能化的硬件设备成为未来的发展趋势。“中国制造2025”计划、德国的“工业4.0”及美国的“工业互联网”都是将人、数据和机器连接起来,其本质是工业的深度信息化,为未来智能社会的发展提供制造技术基础。

在“大众创业,万众创新”的时代背景下,人才的培养方法和模式也应该满足当前的时代需求。作者依据当今信息社会的发展趋势,结合Arduino开源硬件及智能硬件的发展要求,采取激励创新的工程教育方法,培养可以适应未来工业4.0发展的人才就显得相当重要。因此,作者试图探索基于创新工程教育的基本方法,并将其提炼为适合我国国情、具有自身特色的创新实践教材。本书是对实际教学中应用智能硬件的创新工程教学经验的总结,包括具体的创新方法和开发案例,希望对教育教学及工业界有所帮助,起到抛砖引玉的作用。

本书的内容和素材主要来源于作者所在学校近几年承担的教育部和北京市的教育、教学改革项目和成果,也是北京邮电大学信息工程专业的同学们创新产品的设计成果。书中系统地介绍了如何利用Arduino平台进行产品开发,包括相关的设计、实现与产品应用,主要内容包括Arduino设计基础,生活便捷类开发案例、人机交互类开发案例等。

本书由北京邮电大学创新创业教育精品课程项目资助,同时也得到了教育部电子信息类专业教学指导委员会、信息工程专业国家第一类特色专业建设项目、信息工程专业国家第二类特色专业建设项目、教育部CDIO工程教育模式研究与实践项目、教育部本科教学工程项目、信息工程专业北京市特色专业建设、北京市教育教学改革项目的大力支持。在此一并表示感谢!

为了便于读者高效学习,及时掌握Arduino开发方法,本书配套提供项目设计的硬件电路图、程序代码、实现过程中出现的问题及解决方法,可供读者举一反三,二次开发。

由于作者水平有限,书中不妥之处在所难免,衷心希望各位读者多提宝贵意见,以便作者进一步修改和完善。李永华于北京邮电大学2019年3月第1章Arduino设计基础1.1 开源硬件简介

电子电路是人类社会发展的重要成果,在早期的硬件设计和实现上都是公开的,包括电子设备、电器设备、计算机设备以及各种外围设备的设计原理图。大家认为公开是十分正常的事情,所以早期公开的设计图并不称为开源。1960年左右,很多公司根据自身利益选择了闭源,由此出现了贸易壁垒、技术壁垒、专利版权等问题,以及不同公司之间的互相起诉现象。例如,国内外的IT公司之间由于知识产权而法庭相见的案例屡见不鲜。虽然这种做法在一定程度上有利于公司自身的利益,但不利于小公司或者个体创新者的发展。特别是在互联网进入Web 2.0的个性化时代后,更加需要开放、免费和开源的开发系统。

因此,在“大众创业,万众创新”的时代背景下,Web 2.0时代的开发者开始思考是否可以重新对硬件进行开源。从最初很小的东西发展到现在,已经有3D打印机、开源的单片机系统等,电子爱好者、发烧友及广大的创客一直致力于开源的研究,推动开源的发展。一般认为,开源硬件是指采取与开源软件相同的方式设计的各种电子硬件的总称。也就是说,开源硬件是考虑对软件以外的领域进行开源,是开源文化的一部分。开源硬件可以自由传播硬件设计的各种详细信息,如电路图、材料清单和开发板布局数据。通常使用开源软件来驱动开源的硬件系统。本质上,共享逻辑设计、可编程的逻辑元件重构也是一种开源硬件,通过硬件描述语言代码实现电路图共享。硬件描述语言通常用于芯片系统、可编程逻辑阵列,或直接用在专用集成电路中,也称为硬件描述语言模块或IP cores。

众所周知,Android就是开源软件之一。开源硬件和开源软件类似,通过开源软件可以更好地理解开源硬件,就是在之前已有硬件的基础之上进行二次开发。二者也有差别,体现在复制成本上,开源软件的成本几乎是零,而开源硬件的复制成本较高。另外,开源硬件延伸着开源软件代码的定义,软件、电路原理图、材料清单、设计图等都使用开源许可协议,自由使用分享,完全以开源的方式去授权,避免了以往DIY分享的授权问题;同时,开源硬件把开源软件常用的GPL、CC等协议规范带到硬件分享领域,为开源硬件的发展提供了标准。1.2 Arduino开源硬件

本节主要介绍Arduino开源硬件的各种开发板和扩展板的使用方法、Arduino开发板的特性以及Arduino开源硬件的总体情况,以便更好地应用Arduino开源硬件进行开发创作。1.2.1 Arduino开发板

Arduino开发板是基于开放原始代码简化的I/O平台,并且使用类似Java、C/C++语言的开发环境,可以快速使用Arduino语言与Flash或Processing软件,完成各种创新作品。Arduino开发板可以使用各种电子元件,如传感器、显示设备、通信设备、控制设备或其他可用设备。

Arduino开发板也可以独立使用,成为与其他软件沟通的平台,如Flash、Processing、Max/MSP、VVVV或其他互动软件。Arduino开发板的种类很多,包括Arduino UNO、YUN、DUE、Leonardo、Tre、Zero、Micro、Esplora、MEGA、Mini、NANO、Fio、Pro及LilyPad Arduino。随着开源硬件的发展,将会出现更多的开源产品。下面介绍几种典型的Arduino开发板。

Arduino UNO是Arduino USB接口系列的常用版本,是Arduino平台的参考标准模板,如图1-1所示。Arduino UNO的处理器核心是ATmega328,具有14个数字I/O引脚(其中6个可作为PWM输出)、6个模拟输入引脚、1个16MHz晶体振荡器、1个USB接口、1个电源插座、1个ICSP插头和1个复位按钮。

如图1-2所示,Arduino YUN是一款基于ATmega32U4和Atheros AR9331的开发板。Atheros AR9331可以运行基于Linux和OpenWRT的操作系统Linino。这款单片机开发板具有内置的Ethernet、WiFi、1个USB接口、1个Micro插槽、20个数字I/O引脚(其中7个可以用于PWM、12个可以用于模数转换)、1个Micro USB接口、1个ICSP插头和3个复位开关。图1-1 Arduino UNO图1-2 Arduino YUN

如图1-3所示,Arduino DUE是一块基于Atmel SAM3X8E CPU的微控制器板。它是第一块基于32位ARM核心的Arduino开发板,有54个数字I/O引脚(其中12个可用于PWM输出)、12个模拟输入引脚、4个UART硬件串口、84MHz的时钟频率、1个USB OTG接口、2个数模转换、2个TWI、1个电源插座、1个SPI接口、1个JTAG接口、1个复位按键和1个擦写按键。

如图1-4所示,Arduino MEGA 2560开发板也是采用USB接口的核心开发板,它的最大特点就是具有多达54个数字I/O引脚,特别适合需要大量I/O引脚的设计。Arduino MEGA 2560开发板的处理器核心是ATmega2560,具有54个数字I/O引脚(其中16个可作为PWM输出)、16个模拟输入、4个UART接口、1个16MHz晶体振荡器、1个USB接口、1个电源插座、1个ICSP插头和1个复位按钮。Arduino MEGA 2560开发板也能兼容为Arduino UNO设计的扩展板。目前,Arduino MEGA 2560开发板已经发布到第3版。与前两版相比,第3版有以下新的特点。图1-3 Arduino DUE图1-4 Arduino MEGA 2560(1)在AREF处增加了两个引脚SDA和SCL,支持I2C接口;增加IOREF和1个预留引脚,以便将来扩展板能够兼容5V和3.3V核心板;改进了复位电路设计;USB接口芯片由ATmega16U2替代ATmega8U2。(2)第3版可以通过三种方式供电:外部直流电源通过电源插座供电;电池连接电源连接器的GND和VIN引脚供电;USB接口直接供电。而且,它能自动选择供电方式。

电源引脚说明如下。

VIN:当外部直流电源接入电源插座时,可以通过VIN向外部供电,也可以通过此引脚向Arduino MEGA 2560开发板直接供电;VIN供电时将忽略从USB或者其他引脚接入的电源。

5V:通过稳压器或USB的5V电压,为Arduino MEGA 2560开发板上的5V芯片供电。

3.3V:通过稳压器产生的3.3V电压,最大驱动电流为50mA。

GND:接地引脚。

如图1-5所示,Arduino Leonardo是一款基于ATmega32U4的开发板。它有20个数字I/O引脚(其中7个可用作PWM输出、12个可用作模拟输入)、1个16MHz晶体振荡器、1个Micro USB连接、1个电源插座、1个ICSP头和1个复位按钮。它具有支持微控制器所需的一切功能,只需通过USB电缆将其连至计算机,或者通过电源适配器、电池为其供电即可使用。

Leonardo与先前的所有开发板都不同,ATmega32U4具有内置式USB通信,从而无须二级处理器。这样,除了虚拟(CDC)串行/通信端口,Leonardo还可以充当计算机的鼠标和键盘,它对开发板的性能也会产生影响。

如图1-6所示,Arduino Ethernet是一款基于ATmega328的开发板。它有14个数字I/O引脚、6个模拟输入、1个16MHz晶体振荡器、1个RJ45连接、1个电源插座、1个ICSP头和1个复位按钮。引脚10、11、12和13只能用于连接以太网模块,不能用作他用。可用引脚只有9个,其中4个可用作PWM输出。图1-5 Arduino Leonardo图1-6 Arduino Ethernet

Arduino Ethernet没有板载USB转串口驱动器芯片,但是有1个WIZnet以太网接口,该接口与以太扩展板相同。板载microSD读卡器可用于存储文件,能够通过SD库进行访问。引脚10留作WIZnet接口,SD卡的SS在引脚4上。引脚6串行编程头与USB串口适配器兼容,与FTDI USB电缆、SparkFun和Adafruit FTDI式基本USB转串口分线板也兼容。它支持自动复位,从而无须按下开发板上的复位按钮即可上传程序代码。当插入USB转串口适配器时,Arduino Ethernet由适配器供电。

Arduino Robot是一款有轮子的Arduino开发板,如图1-7所示。Arduino Robot有控制板和电机板,每个开发板上都有1个处理器,共2个处理器。电机板控制电机,图1-7 Arduino Robot控制板读取传感器的数据并决定如何操作。每个开发板都是完整的Arduino开发板,用Arduino IDE进行编程。直流电机板和控制板都是基于ATmega32U4的开发板。Arduino Robot将它的一些引脚映射到板载的传感器和制动器上。

Arduino Robot编程的步骤与Arduino Leonardo类似,2个处理器都有内置式USB通信,无须二级处理器,可以充当计算机的虚拟(CDC)串行/通信端口。Arduino Robot有一系列预焊接连接器,所有连接器都标注在开发板上,通过Arduino Robot库映射到指定的端口上,从而可使用标准Arduino函数。在5V电压下,每个引脚都可以提供或接受最高40mA的电流。

如图1-8所示,Arduino NANO是一款小巧、全面、基于ATmega328的开发板,与Arduino Duemilanove的功能类似,但封装不同,没有直流电源插座且采用Mini-B 图1-8 Arduino NANOUSB电缆。Arduino NANO开发板上的14个数字引脚都可用作输入或输出,利用函数pinMode()、digitalWrite()和digitalRead()可以对它们操作。工作电压为5V,每个引脚都可以提供或接受最高40mA的电流,都有1个20~50kΩ的内部上拉电阻器(默认情况下断开)。Arduino NANO有8个模拟输入,每个模拟输入都提供10位的分辨率(即1024个不同的数值)。默认情况下,它们的电压为0~5V,可以利用函数analogReference()改变其电压范围的上限值。模拟引脚6和7不能用作数字引脚。1.2.2 Arduino扩展板

在Arduino开源硬件系列中,除了主要开发板之外,还有与之配合使用的各种扩展板,可以插到开发板上增加额外的功能。选择适合的扩展板,可以增强系统开发的功能。常见的扩展板有Arduino Ethernet Shield、Arduino GSM Shield、Arduino Motor Shield、Arduino 9 Axes Motion Shield等。

Arduino Ethernet Shield(以太网扩展板)如图1-9所示,有1个标准的有线RJ45连接,具有集成式线路变压器和以太网供电功能,可将Arduino开发板连接到互联网。它基于WIZnet W5500以太网芯片,提供网络(IP)堆栈,支持TCP和UDP协议,可以同时支持8个套接字连接,使用以太网库写入程序代码。

以太网扩展板利用贯穿扩展板的长绕线排与Arduino开发板连接,保持引脚布局完整无缺,以便其他扩展板堆叠其上。它有1个板载micro-SD卡槽,可用于存储文件,且与Arduino UNO开发板和Arduino MEGA开发板兼容,可通过SD库访问板载micro-SD读卡器。以太网扩展板带有1个供电(PoE)模块,可从传统的5类电缆获取电力。

Arduino GSM Shield如图1-10所示,为了连接蜂窝网络,扩展板需要一张由网络运营商提供的SIM卡。它通过移动通信网将Arduino开发板连接到互联网,可拨打/接听语音电话和发送/接收SMS信息。图1-9 Arduino Ethernet Shield图1-10 Arduino GSM Shield

GSM Shield采用Quectel的无线调制解调器M10,利用AT命令与开发板通信。GSM Shield利用数字引脚2、3与M10进行软件串行通信,引脚2连接M10的TX引脚,引脚3连接M10的RX引脚,调制解调器的PWRKEY引脚连接引脚7。

M10是一款四频GSM/GPRS调制解调器,其工作频率分别为GSM850MHz、GSM900MHz、DCS1800MHz和PCS1900MHz。它通过GPRS连接支持TCP/UDP和HTTP。其中GPRS数据下行链路和上行链路的最大传输速率为85.6Kb/s。

Arduino Motor Shield如图1-11所示,用于驱动电感负载(如继电器、螺线管、直流和步进电动机)的双全桥驱动器L298。Arduino Motor Shield可以驱动2个直流电机,并能独立控制每个电机的速度和方向。因此,它有2条独立的通道,即A和B,每条通道使用4个开发板引脚驱动或感应电机,所以Arduino Motor Shield使用的引脚共8个。它不仅可以单独驱动2个直流电机,也可以将它们合并起来驱动1个双极步进电机。

Arduino 9 Axes Motion Shield如图1-12所示。它采用德国博世传感器技术有限公司推出的BNO055绝对方向传感器。这是一个使用系统级封装,集成三轴14位加速计、三轴16位陀螺仪、三轴地磁传感器,并运行BSX3.0 FusionLib软件的32位微控制器。BNO055在三个垂直的轴上具有三维加速度、角速度和磁场强度数据。图1-11 Arduino Motor Shield图1-12 Arduino 9 Axes Motion Shield

另外,它还提供传感器融合信号,如四元数、欧拉角、旋转矢量、线性加速度、重力矢量。结合智能中断引擎,可以基于慢动作或误动作识别、任何动作(斜率)检测、高g检测等项触发中断。

Arduino 9 Axes Motion Shield兼容UNO、YUN、Leonardo、Ethernet、MEGA和DUE开发板。在使用Arduino 9 Axes Motion Shield时,要根据使用的开发板将中断桥和重置桥焊接在正确的位置。1.3 Arduino软件开发平台

本节主要介绍Arduino开发环境的特点及使用方法,包括Arduino开发环境的安装,以及简单的硬件系统与软件调试方法。1.3.1 Arduino平台特点

作为目前最流行的开源硬件开发平台,Arduino具有非常多的优点,正是这些优点使得Arduino平台得以广泛地应用,包括:(1)开放源代码的电路图设计和程序开发界面,可免费下载,也可依需求自己修改;Arduino可使用ICSP线上烧录器,将Bootloader烧入新的IC芯片;可依据官方电路图,简化Arduino模组,完成独立运作的微处理控制。(2)可以非常简便地与传感器或各式各样的电子元件连接(如红外线、超声波、热敏电阻、光敏电阻、伺服电机等);支持多样的互动程序,如Flash、Max/Msp、VVVV、PD、C、Processing等;使用低价格的微处理控制器;USB接口无须外接电源;可提供9V直流电源输入以及多样化的Arduino扩展模块。(3)在应用方面,可通过各种各样的传感器来感知环境,并通过控制灯光、直流电机和其他装置来反馈并影响环境;可以方便地连接以太网扩展模块进行网络传输,使用蓝牙传输、WiFi传输、无线摄像头控制等多种应用。1.3.2 Arduino IDE的安装

Arduino IDE是Arduino开放源代码的集成开发环境。它的界面友好,语法简单且方便下载程序,这使得Arduino的程序开发变得非常便捷。作为一款开放源代码的软件,Arduino IDE也是由Java、Processing、AVR-GCC等开放源代码的软件写成的。Arduino IDE的另一个特点是跨平台的兼容性,适用于Windows、Mac OS X以及Linux。2011年11月30日,Arduino官方正式发布了Arduino 1.0版本,可以下载不同操作系统的压缩包,也可以在GitHub上下载源代码重新编译自己的Arduino IDE。安装过程如下:(1)从Arduino官网下载最新版本IDE,下载界面如图1-13所示。在下载界面选择适合自己计算机操作系统的安装包。这里以64位Windows 7系统中的安装过程为例进行介绍。(2)双击EXE文件选择安装,弹出如图1-14所示的界面。单击“是”按钮,弹出如图1-15所示的界面。图1-13 Arduino下载界面图1-14 Arduino安装界面(3)单击I Agree按钮同意协议,弹出如图1-16所示的界面。图1-15 Arduino协议界面图1-16 Arduino选择安装组件(4)选择需要安装的组件,单击Next按钮,弹出如图1-17所示的界面。(5)选择安装位置,单击Install按钮,弹出如图1-18所示的界面。图1-17 Arduino选择安装位置图1-18 Arduino安装过程(6)安装USB驱动,如图1-19所示。图1-19 Arduino安装USB驱动(7)安装完成,如图1-20所示。图1-20 Arduino安装完成(8)进入Arduino IDE开发界面,如图1-21所示。图1-21 Arduino IDE开发界面1.3.3 Arduino IDE的使用

首次使用Arduino IDE时,需要将Arduino开发板通过USB线连接到计算机,计算机会为Arduino开发板安装驱动程序,并分配相应的COM端口,如COM1、COM2等。不同的计算机和系统分配的COM端口是不一样的,所以安装完毕要在计算机的硬件管理中查看Arduino开发板被分配到了哪个COM端口。这个端口就是计算机与Arduino开发板的通信端口。

Arduino开发板的驱动安装完毕,需要在Arduino IDE中设置相应的端口和开发板类型。方法如下:Arduino集成开发环境启动后,在菜单栏中选择“工具”→“端口”命令,进行端口设置,设置为计算机硬件管理中分配的端口;然后,在菜单栏中选择“工具”→“开发板”命令,选择Arduino开发板的类型,如UNO、DUE、YUN等前面介绍过的开发板。这样,计算机就可以与开发板进行通信。工具栏显示的功能如图1-22所示。图1-22 Arduino IDE的工具栏功能

在Arduino IDE中带有很多种示例,包括基本的、数字的、模拟的、控制的、通信的、传感器的、字符串的、存储卡的、音频的、网络的示例等。下面介绍一个最简单、具有代表性的例子——Blink,以便于读者快速熟悉Arduino IDE,进而开发出新的产品。

在菜单栏中选择“文件”→“示例”→01Basic→Blink命令,这时在主编辑窗口会出现可以编辑的程序。这个Blink范例程序的功能是控制LED的亮灭。在Arduino编译环境中,是以C/C++的风格来编写的。程序的前几行是注释行,介绍程序的作用及相关声明等;然后是变量的定义;最后是Arduino程序的两个函数,即void setup()和void loop()。void setup()中的代码会在导通电源时执行一次,void loop()中的代码会不断重复执行。由于在Arduino UNO开发板的引脚13上有LED,所以定义整型变量LED=13,用于函数的控制。另外,程序中用了一些函数,pinMode()是设置引脚的作用为输入还是输出;delay()是设置延迟的时间,单位为毫秒;digitalWrite()是向LED变量写入相关的值,使得引脚13的LED电平发生变化,即HIGH或者LOW,这样LED就会根据延迟时间交替地亮灭。

完成程序编辑之后,在工具栏中找到存盘按钮,将程序进行存盘。然后,在工具栏中找到上传按钮,单击该按钮将被编辑后的程序上传到Arduino开发板中,使得开发板按照修改后的程序运行。同时,还可以单击工具栏中的串口监视器,观察串口数据的传输情况。它是非常直观、高效的调试工具。

主编辑窗口中的程序如下:

当然,目前还有其他支持Arduino的开发环境,如SonxunStudio。它是由松迅科技开发的集成开发环境,目前只支持Windows系统的Arduino系统开发,包括Windows XP以及Windows 7,使用方法与Arduino IDE大同小异。由于篇幅的关系,这里不再赘述。1.4 Arduino编程语言

Arduino编程语言是建立在C/C++语言基础上的,即以C/C++语言为基础,把AVR单片机(微控制器)相关的一些寄存器参数设置等进行函数化,以利于开发者更加快速地使用。其主要使用的函数包括数字I/O引脚操作函数、模拟I/O引脚操作函数、高级I/O引脚操作函数、时间函数、中断函数、串口通信函数和数学函数等。1.4.1 Arduino编程基础

关键字:if、if…else、for、switch、case、while、do…while、break、continue、return、goto。

语法符号:每条语句以“;”结尾,每段程序以“{}”括起来。

数据类型:boolean、char、int、unsigned int、long、unsigned long、float、double、string、array、void。

常量:HIGH或者LOW,表示数字I/O引脚的电平,HIGH表示高电平(1),LOW表示低电平(0);INPUT或者OUTPUT,表示数字I/O引脚的方向,INPUT表示输入(高阻态),OUTPUT表示输出(AVR能提供5V电压,40mA电流);TRUE或者FALSE,TRUE表示真(1),FALSE表示假(0)。

程序结构:主要包括两部分,即void setu()和void loop()。其中,前者是声明变量及引脚名称(如int val;int ledPin=13),在程序开始时使用,初始化变量和引脚模式,调用库函数等[如pinMode(ledPin,OUTPUT)];后者用在函数setup()之后,不断地循环执行,是Arduino的主体。1.4.2 数字I/O引脚的操作函数

1.pinMode(pin,mode)

pinMode函数用于配置引脚以及设置输出或输入模式,是一个无返回值函数。该函数有两个参数:pin和mode。pin参数表示要配置的引脚;mode参数表示设置该引脚的模式为INPUT(输入)或OUTPUT(输出)。

INPUT用于读取信号,OUTPUT用于输出控制信号。pin的范围是数字引脚0~13,也可以把模拟引脚(A0~A5)作为数字引脚使用,此时编号为14的引脚对应模拟引脚0,编号为19的引脚对应模拟引脚5。该函数一般会放在setup()里,先设置再使用。

2.digitalWrite(pin,value)

digitalWrite函数的作用是设置引脚的输出电压为高电平或低电平,也是一个无返回值的函数。

pin参数表示所要设置的引脚;value参数表示输出的电压为HIGH(高电平)或LOW(低电平)。

注意:使用前必须先用pinMode设置。

3.digitalRead(pin)

digitalRead函数在引脚设置为输入的情况下,可以获取引脚的电压情况:HIGH(高电平)或者LOW(低电平)。

数字I/O引脚的操作函数使用例程如下:1.4.3 模拟I/O引脚的操作函数

1.analogReference(type)

analogReference函数用于配置模拟引脚的参考电压。它有三种类型:DEFAULT是默认模式,参考电压是5V;INTERNAL是低电压模式,使用片内基准电压源2.56V;EXTERNAL是扩展模式,通过AREF引脚获取参考电压。

注意:若不使用该函数,默认参考电压是5V。若使用AREF作为参考电压,需接一个5kΩ的上拉电阻。

2.analogRead(pin)

analogRead函数用于读取引脚的模拟量电压值,每读取一次需要花100μs的时间。参数pin表示所要获取模拟量电压值的引脚,返回为int型。它的精度为10位,返回值为0~1023。

注意:函数参数pin的取值是0~5,对应开发板上的模拟引脚A0~A5。

3.analogWrite(pin,value)

analogWrite函数是通过PWM(Pulse-Width Modulation,脉冲宽度调制)的方式在引脚上输出一个模拟量。图1-23所示为PWM输出的一般形式,也就是在一个脉冲的周期内高电平所占的比例。它主要应用于LED亮度控制、直流电机转速控制等方面。图1-23 占空比的定义注:PWM波形的特点是波形频率恒定,占空比D可以改变。

Arduino中PWM的频率约为490Hz,Arduino UNO开发板支持以下数字引脚(不是模拟输入引脚)作为PWM模拟输出:3、5、6、9、10、11。开发板带PWM输出的都有“~”号。

注意:PWM输出位数为8位,即0~255。

模拟I/O引脚的操作函数使用例程如下:1.4.4 高级I/O引脚的操作函数

函数PulseIn(pin,state,timeout)用于读取引脚脉冲的时间长度,脉冲可以是HIGH或者LOW。如果是HIGH,该函数将先等引脚变为高电平,然后开始计时,直到变为低电平停止计时。返回脉冲持续的时间,单位为ms(毫秒),如果超时没有读到时间,则返回0。

例程说明:做一个按钮脉冲计时器,测量按钮的持续时间,看谁的反应最快,即谁按按钮时间最短,按钮接在引脚3。程序如下:1.4.5 时间函数

1.delay()

delay函数是延时函数,参数是延时的时长,单位是ms。应用延时函数的典型例程是跑马灯的应用,使用Arduino开发板控制4个LED依次点亮。程序如下:

2.delayMicroseconds()

delayMicroseconds()也是延时函数,单位是μs(微秒),1ms=1000μs。该函数可以产生更短的延时。

3.millis()

millis()为计时函数。应用该函数可以获取单片机通电到现在运行的时间长度,单位是ms。系统最长的记录时间为9h22min,超出则

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载