已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
进入自动控制的世界Arduino风的孩子2011/7/11写作说明本书适合的使用者如下: “电学小白”“计算机小白”“编程小白”“电子小白”以及一切对自己的水平有清醒认识但是又想接触单片机(此处特指arduino)完成互动或者自动控制任务的“小白”。本书作者的本职工作是经济管理,而arduino则是他的日常爱好。所以,在写这本书的时候,这个不怕骂的家伙在胆大包天地尝试用外行话来给外行人说明怎么使用arduino,如何进入自动控制和互动艺术的大门。在这本书里面,作者尝试使看图说话的办法,来让众小白兄弟姐妹们建立起一个完整的知识构架:在互动艺术装置上(或者称自动控制的问题上)。我需要什么东西,通过什么途径,最终达到我的目的。而在器材的准备上,作者也打算尝试用最少的实验器材来实现arduino的入门。前章 大话自动控制技术第一轮的物料准备:1. 一台联网的计算机2. 一块arduino UNO 主板(带USB连接线) 3. 一块面包板 4. 1K的碳膜电阻 10个 (不管是四分之一瓦还是八分之一瓦都行) 5.10K的碳膜电阻 10个(不管是四分之一瓦还是八分之一瓦都行) 6. 旋钮式可调电位器 1个5. 草帽型LED(颜色随便) 10个 6. 面包线一把 7. 轻触开关 1个第一章 不管三七二十一,让UNO上的“L”灯闪烁起来 “L”灯在哪里?它是什么样子?如何点亮?稍安勿躁,我们先搞定编程界面。 第一节:搞定编程界面 1.1下载从如下地址下载好【arduino-0022】, 它是arduino的编程软件,通过它,我们可以编写程序,而后下载到arduino 主板上,从而使得主板能够根据我们编定的程序而自动工作。软件的web地址:http:/arduino.cc/en/Main/Software下载的位置如左图所示。下载下来的文件是一个arduino-0022.zip的压缩文件夹。将文件随便找一个位置解压出来。注意:如果你的操作系统不是windows.请对照你的操作系统下载不同的编程软件。Arduino 支持Windows、MAC OS(苹果机)、Linux 三种操作系统。不过,在这本书里面,所有的讨论都是默认在windows7的环境下。因为作者是使用这个操作系统,而且,国内绝大部分的电脑都是使用的WINDOWS操作系统。 1.2打开编程界面进入解压缩的文件夹,如左图。双击红框所指的应用程序(arduino.exe)便可以进入arduino 的主界面。提醒:如果你嫌每次都要打开N个文件夹才能够打开arduino.exe这个程序,可以右键,然后发送快捷方式到桌面去。1.3 arduino的主界面 请保持这个界面不动。后面,我们将开始硬件的连接工作如果不小心关闭了,请根据上面的步骤,重新打开这个窗口。第二节 搞定UNO和计算机的连接 2.1、连接USB连接线和arduino UNO 主板插入这个就是USB B口,或者叫方口。拿起USB连接线,找到上图的方口对着arduino的方口插进去这个不存插头在插反的问题,如果你插反了,会插不进去注意:千万不要在连接USB连接线之后,把Arduino UNO 主板放在潮湿,或者有金属碎屑,有裸露的金属丝等环境。如果你这么做了,那么恭喜,你有很大的可能性会看见板子上有一阵青烟冒起。然后,你需要准备好现大洋,打开淘宝,然后重新买一块Arduino UNO主板,因为,它已经短路烧毁咧。2.2、连接USB 连接线和计算机 USB扁口别告诉我不认识,也别告诉我你不知道电脑上的USB口是哪个。 好吧,我还是啰嗦一下,扁口就是USB连接线那个扁扁的接口。如左图 而计算机的USB口就是电脑上你经常插U盘,MP3播放器,手机数据线的那个接口。这个也不存插头在插反的问题,如果你插反了,还是会插不进去,除非,你要当野蛮人。注意: 当你正确的将arduino 主板和电脑连接起来,你会发现arduino主板上面有一颗绿色的灯亮了起来,仔细查看灯的右边,会发现有“ON”这个英文。这颗灯标示主板已经接通电源(术语叫“上电”),处于运行状态。不同于电脑,你给它插上插头,它并不会工作,还需要按一下启动按钮它才开始启动。Arduino 只要一给电,它就开始工作,直到被扯掉电源接头(术语叫“掉电”)它才停止工作。由于Arduino在不接诸如电机等设备的时候,其耗电量非常小,所以,它通过USB从电脑获得的电力便已经足够它运行。本书的所有的试验都属于小电流的试验,所以,无需额外的外接电源。若“ON”灯并未发亮,请检查连接线的连接是否正确。若检查线之后无问题,则尝试换一个USB口看看(有时候电脑的USB口已经损坏,Arduino 主板取不到电,故而“ON”灯不会发亮)。如果还不亮,有八成的可能,板子坏列,有两成的可能是USB线断了,这时候,你需要用替换法来找到问题的来源。想尽办法,直到直到“ON”发亮为止。2.3、安装驱动任何一样硬件,如果想要在windows上能正常使用,就必须给它安装驱动,arduinoUNO主板也不例外。 当你成功地完成了将一根USB连接线连接起arduino 主板和计算机的时候。windows会在屏幕的右下角显示左边的提示。如果你放着不管,很快,它会提示安装失败。 除非你以前已经安装过UNO,否则提示失败是必然滴。右键点击【计算机】,在弹出的右键菜单里面点【属性】,会弹出一个如左图所示的界面,这个界面叫“系统”在箭头所指的位置点设备管理器,然后又会弹出新的界面,如后一个图片。这个界面叫做【设备管理器】。当你打开了设备管理器之后,找一找,你会发现一个叫做Arduino UNO 的未知设备右击这个未知设备,在新弹出来的右键菜单中选择【更新驱动程序软件】在新弹出的对话框中选择:【浏览计算机以查找驱动程序软件】进入下一步点【浏览】按键弹出一个【浏览文件夹】的小对话框在【浏览文件夹】对话框里面一直找到arduino-0022解压缩所在的文件夹的位置,打开里面的drivers文件夹点【确定】按键【浏览文件夹】对话框将关闭,在【更新驱动程序软件-Arduino UNO】对话框点下一步。此时,会弹出一个windows 安全的警告,说无法验证此驱动程序软件云云。选下面一个选项:【始终安装此驱动程序软件】提示:放心,不是病毒,因为UNO的驱动没有进行微软认证,仅此而已,安装这个驱动并不影响操作系统的运行稍等一会儿,windows开始安装UNO的驱动程序。当这个界面出现的时候,表示,arduino UNO已经成功地安装完毕了。点击确认。关闭驱动程序更新的对话框 这个时候,你会发现,原本属于【其它设备】分类的Arduino UNO 已经被windows搬迁到【端口(COM和LPT)】的位置如左图所示。记下图标小括号里面的(COMX),X表示数字(自己填空,我的COM口的编号是:_)如作者所截取的屏幕,标示为COM21,即,X=21,这表示当前连接到电脑的arduino UNO 主板,是通过COM21和电脑进行通讯的。这个数字很重要,稍后要用到注意:任意两块不同的arduino UNO 主板,当它被插到电脑上的时候,都需要重新安装驱动程序,电脑会自动区分它们,并给它们赋予不同的COM编号,即括号里面的(COMX),这个X不同。至此,Arduino UNO的硬件连接及驱动完成。第三节 点亮“L”灯3.1 选对正确的主板类型。让我们把手和目光重新回到电脑边上,右手捏着鼠标开始点击如下在Arduino-0022的编程界面点击【Tools】将鼠标移动到下拉菜单 的【Board】选项,在继续弹出的子菜单中确定:【Arduino UNO】前面是否有一坨黑点。如果不是,则点一下【Arduino UNO 】这个选择项注意:请务必确保 【Arduino UNO】选项前有一坨黑点,否则后面会出错。3.2 选择正确的COM连接。还记得刚才安装硬件的时候的要求你记录下来的那个(COMX)的X的值么?这里就要用到。如作者安装的Arduino UNO的端口就是21,所以鼠标就点选21.而读者则根据自己的电脑装Arduino UNO的时候,系统分配给UNO的COM口的编号来进行点选。如果你忘记了,就去翻刚才2.3所记录的那个数字。如果你忘记记录了,也没有关系,根据2.3的步骤,可以进入设备管理器,也可以查找到你当前和电脑连接的Arduino UNO的COM口的编号。3.3 导入一个让“L”灯闪烁的示例程序 鼠标左键点【File】在弹出的下拉菜单里面移动鼠标到【Examples】菜单向右边扩展到【1.Basics】鼠标移动到【1.Basics】之后,菜单继续展开,找到【Blink】而后,鼠标左键单击【Blink】单击完【Blink】,会弹出一个新的Arduino 编程界面。什么都不管,直接点左图红色箭头1所指的的图标。随后,你会发现,在2的位置会出一列文字提示:紧接着,你会发现,Arduino UNO主板上会有两个黄色的灯会狂闪一阵。随着两个狂闪的黄色灯熄灭。2的位置出现文字提示:随后,Arduino UNO主板上,会有一盏绿色的灯以1秒一次的速度恒定地亮灭:表现为:亮,维持1秒,灭,维持1秒,亮,维持1秒,灭,维持1秒这种状态会一直维持下去,直到Arduino UNO主板被拔掉了USB连接线(没电了)或者被重新编程,或者被读者有意或者无意地毁灭它。而主板上这枚没完没了亮灭的灯就是传说中的“L”灯。仔细在这个灯边上找找,你会发现板子在灯的附近印有一个白色的字母“L”而刚才狂闪的两枚黄灯的边上则标注了“”和“”至此,热烈的恭喜小白读者们,你们已经完成了第一个Arduino的编程试验。而在当初,作者倒腾明白上面的步骤,整整花费了3天地时间和若干把头发。没有点亮?可能发生的问题及解决方法:1 错误来源:【tools】-【hardware】中选错了主板类型,或者【tools】-【Serial Port】中选错了COM连接。错误表现:L灯不会闪,并且上图的红框2内会出现这样的报错:同时红框3内还会显示如下例的报错: Binary sketch size: 1018 bytes (of a 14336 byte maximum)avrdude: stk500_getsync(): not in sync: resp=0x00avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51注意:resp, expect, resp 等号后面的文字可能略有不同。错误的解决方法:重新执行3.1的步骤,确定你选择了正确的arduino 主板,本书限定为arduino UNO。所以,请确定那一坨黑点的确在Arduino UNO的选项前。 重新执行3.2的步骤,确定你选择了正确的COM连接。务必确定电脑【设备管理器】中的Arduino UNO 的COMX的X的值在arduino 编程界面中的【tools】-【Serial Port】被正确地选择。第二个可能是你计算机的USB口的供电不足。如果是笔记本,请尝试换一个USB连接口,现在主流的笔记本电脑都有一个叫做大功率USB的接口,用于外界用电量比较大的USB设备。如果是台式机,注意,一般情况下别用前面板的USB接口,因为前面板的USB接口的供电量往往比较底下,尝试使用计算机机箱后部的USB接口。 扩展阅读1、关于不同类型Arduino 主板的USB驱动问题 Arduino发展到现在已经出品了N多类型的主板,它们最新型号的全家福可以如下网站链接看到:http:/arduino.cc/en/Main/Hardware 如何为自己手头的Arduino 主板安装正确的驱动程序?其实,很简单。 到目前为止,Arduino的官方USB-RS232转换芯片只有两种,除开这两种芯片,有一些爱好者还会采用别的同功能芯片来进行替代,这里不进行赘述。下图是两种官方主板使用的USB-RS232芯片的外形: FDTI公司出品的FT232RL芯片。 ATMEL公司出品的ATmega8U2芯片。对于安装了FT232RL芯片的Arduino 主板,除了Arduino NANO之外,使用FT232RL芯片的Arduino主板都是比较老的Arduino主板。它的驱动可以在【Drivers 】文件夹里面的【FTDI USB Drivers 】子文件夹中找到。安装的步骤和方法可以参照章节2.3而使用ATMEGA8U2芯片的主板,在本书定稿之时,仅仅有两种主板,一种是Arduino UNO,一种是Arduino Mega。UNO的驱动安装方法已经详细描述,Mega的驱动安装也是一样,不过在选择驱动文件的时候,应该选择【Arduino MEGA 2560.inf 】这个文件。额外需要提及一点,使用FT232RL芯片的主板,WINDOWS只能标示和Arduino 主板已经连接,在【端口(COM和LPT)】中显示【USB Serial Port(COMX)】(X表示一个数字),而无法辨认主板的具体的型号。 而使用ATmega8U2的主板,则windows可以直接认出主板的型号。知识点:USB-RS232转换芯片:它的功能是将电脑USB的信息包翻译成RS232信息包,Arduino自己只认识RS232信息包。如果把USB信息包比喻成英语,而把RS232信息包比喻成汉语,则USB-RS232硬件则相当于一个翻译,它能够使得操英语的人和操汉语的人互相之间进行沟通交流。)RS232:这是一种通讯协议,所谓的通讯协议可以理解为电脑之间进行沟通交流的时候的一种语言种类,就好像大千世界,有N种语言一样,电脑,芯片之间要完成信息沟通,也有很多的方言,标准官话,这个,我们会在后面做出介绍。通常,电脑通过端口之中的COM口进行RS232通讯。2 关于不同主板在arduino 编程界面的hardware的选择 如3.1中的【hardware】菜单所罗列的那样。arduino的主板类型多到乱花渐欲迷人眼。如何确定手头的主板类型呢?方法如下:第一步,看主板上面白色的文字标示,对应主板上面的文字标示,我们可以初步确定,手头的主板是UNO,deumilanove,Nano还是什么别的。第二步,看一下主芯片上面的文字(主芯片,上面会有一行标注ATMEGAXXX-XX 的字样),如果XXX标示为328,则选择对应的328类型,如果XXX标示为168 则选择168类型,还有可能看到XXX为一个8字,则选择8的类型。 这一步不是必须的,如果在确定第一步的时候发现主板的类型下还有两种类型,则需要执行这一步。 综合以上两步,除非我们受到了奸商的坑害,或者主板已经损坏,否则,我们肯定能够成功地对手头的arduino 主板进行编程。如果你还不确定,好吧,打开QQ,加入QQ群1277738。在群里面嚎叫求助,会有热心的朋友来协助你的。第二章改变 L灯的闪烁频率 -认识Arduino 的软件编程在前面的一章里面,我们采用的方法是生吞活剥法,不管一切背景知识,采用填鸭的方法使得读者们能够开始自己的第一个Arduino 试验。那么,在未来,我们总不能拿了这个点“L”灯的试验去找人吹嘘:“露壳!我会玩arduino 了!”所以,如果要继续深入,避免被老鸟们耻笑,我们就必须一步一步地做到知其所以然。在这里,作者,首先先介绍Arduino的软件编程,因为,单就一块arduino UNO主板,我们就可以完成很多有趣的实验,如果从一开始就要在面包板上面拿了零件插来插去,呃,这的确会让人头疼。闲话少说,我们开始吧。第一节 Arduino 编程界面的介绍还记得上一章 3.3 导入一个让“L”灯闪烁的示例程序没?如果你是一口气看到这里,那么我相信你的电脑屏幕上还可以看写着【Blink】列程的编程界面。如果你已经顺手关闭,或者是第二次打开书看到这里,请重复3.3的步骤,打开【Blink】列程,直到如下的界面出现在你的电脑屏幕前。如左图所示,Arduino 编程界面分成8个部分。1 的内容比较简单 它标示了程序的名字而在一个“|”符号之后是Arduino 编程软件的版本,这里是0022版本2 是一些下拉菜单,我们现在可以不用过细地去管它,不过,记得Tools里面的【hardware】,【Serial Port】两个选项的功能。这个前面讲过。3 是一些基本功能按键,这个值得讲一讲。将鼠标移动到这些按钮上面,在最右边的图标再右边的位置会显示这个按钮的名称自左边开始其功能解释见下页。4 当前的程序名字,你的程序命名为什么,这里就显示什么。5 编程区域,在这个区域里面就是我们打算写入到arduino UNO主板中的程序代码,它的具体结构我们在下一节将会进行说明。6 信息提示行,这条蓝色的带区内会进行提示,当前编程软件正在进行的工作,如显示: 【Compling】 表示正在校验,【Done compling】 标示校验完毕 【Uploading to IO board】表示上传到IO板(在这本书里面,IO板就是Arduino UNO主板。如果出错了,6会变成褐黄色,并显示出错信息。7 是详细信息提示,如果是正常信息提示,它的背景是黑色显示白色文字,如果出了错,则同样会编程一个褐黄色的背景,并显示出错信息。8 显示的内容是,你的代码到底有多少行的有效,上面的例子是9行有效,除却灰色的行,请数一下看看?灰色的行是注释行,所谓的注释内容,意思是这部分的内容仅仅是用于注释。Arduino IDE在翻译你的Sktech的时候会自动忽略掉注释的内容。Arduino 编程界面功能图标 清单项次图标名称解释1Verify(验证)顾名思义,当点下这个的时候,它会自动验证5的空白位置内所显示的代码是否正确,当然,一般情况下,它仅能够帮你找出一些显而易见的错误。2Stop(停止)不管任何时候(实际上只括验证,上传两项)点下它,编程界面即停止工作3New(新建)新建一个程序,和Word 新建一个文档没什么两样4Open(打开)打开一个程序,同样和Word一样5Save(保存)保存一个程序,注意,arduino编程界面会把你写的程序保存成一个.PDE的文件。如你命名你写的程序文件为shiyan。则它就保存为shiyan.pde。另外,注意用英文字母保存,arduino编程界面不认识中文。如果你保存了,那么在打开之后,它的文件名就会显示乱码。6Upload(上传)相信这个图标大家都不陌生,点下这个图标,则编程界面会将5里面的内容进行编译(编译,这个我们现在不需要懂,以后再解释)而后上传到你连接到电脑的Arduino 主板里面去。7Serial Monitor(串口监视器)串口监视器,这个我们现在不需要懂,等后面会有专门的章节来进行说明第二节 了解Arduino的编程语言结构 下面,我们开始来重点说明 5的部分的内容,好吧,我们再一次将前页的图贴一次:现在,我们忽略掉所有的灰色注释部分,那么整个代码结构就构成了如下的几行Void setup()PinMode(13,OUTPUT);Void loop()digitalWrite(13,HIGH);delay(1000);digitalWrite(13,LOW);delay(1000);这几行各有什么意义?分别表示什么意思?这也就是本节需要重点说明的问题。2.1 最基本的 Arduino 标准语言结构首先,我们开列一个最简单的标准语言结构:void setup()void loop()呃,最简单的arduino 编程结构就这简单的两行,任何复杂的arduino 程序,都少不了这两个部分,如果少了就会出错。为什么会出错?这不是我们现在需要了解滴。我们只需要强行记下,在任何时候写arduino的编程,首先就把这两段代码给敲出来,记住,一个字母,一个标点符号都不要漏!注意: 1、 一定要看清楚,所有的字母都是小写字母,如果你敲入了大写字母,它就会报错。为什么会报错?因为arduino ,它认不清大小写字母,即便英文的“好”可以拼写成“good”或者“GOOD”-这并不影响我们去了解它所含的意义。但是,Arduino 会固执地认为,其二者表示的意义并不是同一个东西。如果对这个情况用专业的概念来解释,则应该如此说:arduino编程语言“对大小写敏感”。 在未来编程的日子里面,大家一定要瞪大眼睛,看清楚,记清楚,什么位置要敲入大写字母,什么时候敲入小写字母。不然,我们会为各种各样的报错而抓狂。2、一定要分清楚半角和全角的差异,大家看一下双引号:【“”】【】诚然,我们人类在读书的时候,如果书里面两种东西混用,并不会影响我们的阅读,它都表示引用或者强调。但是,悲哀的是,arduino 还是很呆板,它只认英文的标点符号,不认识中文的。所以,在写代码的时候,我们需要务必注意,一定要看确认自己的输入法任务条上得显示,它标明当前输入的标点符号是半角的,而不是全角的。如果实在吃不准,那么在输入代码的时候最好把输入法切换到英文输入。 同样地,如果不注意这一点,我们同样会为各种各样层出不穷的错误而抓狂。 如上面的【“”】【】两种引号符号,我们需要输入的是后者:【】 3、有时候,我们为了阅读的方便,会把上面的两行代码敲成下面的这种形式:void setup()void loop()大家看一下,两个大括号通过敲若干个个回车(就是Enter键)的方式换了若干行。这个,arduino 倒是不呆板,它会自动忽略所有的回车,也就是说,不管你在括号之间敲了多少个回车,换了多少行,它最终还是可以顺利地理解为两行:void setup()void loop()2.2 void Setup( )的功能和作用:void setup( )是arduino 参数的设置区,在这个区域里面,我们可以在大括号里面放入各种参数设定的代码。如【Blink】程序,我们可以看到:PinMode(13,OUTPUT);这一段表示,我们设置了13号口的工作模式是输出(OUTPUT)模式,PinMode 表示进行IO端口的工作模式设置。哪个是13号IO端口?为什么要设置OUPUT?还有没有别的设置?这个我们将在下一个章节学习。这里先留一点悬念。特别注意“;”(分号),Arduino编程语言规定,任何一句描述完成之后,必须用分号进行分割;这就好像,我们写文章,每写完一行,就需要用一个“。”(句号)来进行断句一样。综合以上两项,我们可以将void setup()这个部分想象为:void setup( ) 是一张“A4纸”,我们可以在里面一句又一句地写上以“;”作为句号的系统设置要求。如果将这段要求上传到Arduino 主板上,则arduino 主板就会根据这张“A4纸”所罗列的内容对Arduino的主板进行预先内部设置,以便后面的loop()部分执行。之所以要进行系统设置,就好像我们拿到一台老式的照相机进行拍照,要自己进行光圈的设置,快门速度的设置等。Arduino比较呆板,它就如同一台老式照相机那样,如果不设置,就没法拍出想要效果的照片。如果不在void setup( ) 中对一些特定的功能进行预设置,则arduino主板将无所适从,不知道自己该怎么办。结果就是,它会“失去理智”,干出一些预测不到的事情来。当然,预测不到的事情不是指,它会忽然冒起一阵青烟,宣称你虐待了它,所以它要自杀。或者亮出一阵光芒,一个变形金刚从光芒里面跳出来,朝你大吼:“谁教你不设置的?!我要代表塞伯坦星球消灭你!”所谓的预测不到的概念,是指arduino主板如果执行到需要进行预设置却又未设置的工作指令行,它可能会乱来。执行的最终结果,也许并不是你当初编写程序代码所期望的执行结果。当然,不是所有的功能都需要进行设定,这个,会在后面的介绍中逐一进行解说,实现哪些功能,需要进行哪些设定。别向我抱怨,为什么Arduino 可以像一台智能相机那样,不需要设置就可以拍照。呃,这个东西我也是很期待的,如果你在未来,可以想办法取消掉这这些个麻烦的设置,并开源给兄弟姐妹们,我相信,大家都会围绕在你的身边,虔诚地膜拜你。2.3 void loop( ) 的功能和作用void loop( ) 是第二张“A4纸”,在这张纸里面,我们需要在里面填入我们要执行的代码,Arduino会根据这个张“A4纸”所记载的内容执行相应的动作。注意:在英文里面,loop的意思就是循环往复。望文生义,在void loop() 大括号里面放着的代码,arduino会从“”后开始执行,顺序执行下去,一直执行到遇到最后一个“”。在遇到最后一个“”之后,它又会掉过头来,重新从“”后开始执行,顺序往下,这个过程会没完没了,直到它被设定为停止,或者掉电,或者世界毁灭。如【Blink】例程,有如下的代码段,它的执行顺序如箭头所示:Void loop() digitalWrite(13,HIGH);在执行遇到“”后又跑回“”的位置开始往下执行delay(1000);digitalWrite(13,LOW);delay(1000);2.4 了解“功能函数”的概念“功能函数”,看起来,貌似是在讨论一个数学概念,其实,我们大不必如此误解。在arduino 编程环境里面,我们可以将功能函数理解为,通过敲入几个特定字符,组成一个有意义的单词,这个单词内涵了一个动作指示的要求。arduino 主板会根据这个动作指示来完成特定的任务。举一个例子:这就好像你现在是地狱的阎罗王,手下有一个名字叫做arduino的牛头马面。有一天,你这个老大无聊了,想去油炸个小鬼来玩玩,而你又决定让你的马仔Arduino去干这件事情,而你只是打算动动嘴,并不想动手。于是,你得发布命令:“Arduino,你小子去给我准备一口大油锅来,然后去捉一个小鬼,油炸了给老爷我看看,记得,只炸七分熟。”于是,Arduino这个马仔就会根据你的指令,屁颠屁颠地开始它的油炸大业。我们现在分析你发出的指令,在你前面说的“油炸小鬼“这句话里面包含了哪些工作指令:1 搞一口大油锅。2 捉一个小鬼。3 油炸小鬼,而且是七分熟。那么,我们回头来看【Blink】例程的Void loop()中的情形:在“”两个大括号之间,有4行用分号分割的代码,每一段代码,实际上就是一句功能函数,它们包含如功能函数右边所描述的工作指令,Arduino会根据这一句一句地功能函数完成特定的功能:digitalWrite(13,HIGH); arduino主板读到这一句,会在板上的digital 的13脚输出一个5V的电压,并一直保持下去。除非有下面行的那句包含LOW的指令被执行,13脚的状态才会改变。delay(1000); arduino主板读到这一句,整个系统会暂停1000毫秒,即1秒,并保持所有的状态维持不变。1秒=1000毫秒。digitalWrite(13,LOW); arduino主板读到这一句,会在板上的digital 的13脚输出一个0V的电压。并一直保持下去,。除非有类似于上面的包含LOW的指令被执行13脚的状态才会改变。delay(1000); arduino主板读到这一句,整个系统会暂停1000毫秒,即1秒,并保持所有的状态维持不变。1秒=1000毫秒。还记得void loop()的含义没?这里复习下,当代码执行到第二个【delay(1000);】之后,它又会跑回【digitalWrite(13,HIGH);】重新开始执行。还记得“;”的作用没?这里复习下,每一行功能函数敲入完毕,必须用一个“;”作为结束。截止到现在,Arduino总共包含将近200个功能函数,这些函数都能够实现各自特定的功能,如何理解并使用好这些函数,关系到我们在未来到底能够将Arduino玩到什么样的程度。请读者参照本书的附录:Arduino 函数命令详解,以供在未来开始自己的项目的时候,能够较为熟练地驾驭这些功能函数。2.5 改变“L”灯的点亮和熄灭的时间 前面啰嗦了这么多,相信,诸位读者已经大致了解了Arduino 编程的一些基本的情况。那么,我们现在提出这样的一个问题:我想让“L”灯亮2秒,然后熄灭2秒,怎么办?依旧是【Blink】例程,我们刚刚分析过它里面每行代码的意义。那么,现在是亮2秒熄灭2秒。所以,我们只需要简单的将delay(1000);这个函数改变一下它的值,把1000毫秒这个数值改成2000便可以。完全的代码如下:Void setup()PinMode(13,OUTPUT);Void loop()digitalWrite(13,HIGH);delay(2000);digitalWrite(13,LOW);delay(2000);大家继续完成实验:A. 完成实验:“L”灯亮3秒,灭1秒,重复不断B. 完成实验:“L”灯亮500毫秒,灭500毫秒,重复不断C. 完成实验:“L”灯亮1秒,灭1秒,亮2秒,灭2秒。重复不断。2.6使用条件判断语句来完成重复的工作(for。while 循环及if。else 循环) 还是点“L”灯的工作,如果我们遇到如下的目标要如何实现? 让“L”灯以量1S,灭1S的方式连续闪它100次。 如果我们还用诸如如下的方法写,那么我们的手就会变成鸡爪:Void setup()PinMode(13,OUTPUT);Void loop()digitalWrite(13,HIGH);delay(2000);digitalWrite(13,LOW);delay(2000);-(中间省略98个4行一组的代码)digitalWrite(13,HIGH);delay(2000);digitalWrite(13,LOW);delay(2000);如何解决这个问题?那么解决的思路就是,我们设定一个数A等于100,然后再设置另外一个数B等于0。每完成一次点亮熄灭L灯的循环之后,B就加一个1,然后再去和A比较。如果A小于100,则继续完成电L灯的循环,同时把B再加一个1,直到B等于100为止。这样,我们就可以让我们的代码得到极大地简化。for 语句的格式:一个完整的for 循环,包含如下关键格式:for(【检测量】;【检测量与目标量的比较方法】;【检测量变化的方法】) 放入需要执行的代码即:for 语句会使得“”之内的代码从“”开始,一行一行的往下执行,直到遇到“”而使得它不再执行“”之内的代码的条件是:检测量在不断的变化之后,满足了“与目标量的比较方法”的条件。实现的代码如下: int A =0; int B=100; void setup()pinMode(13,OUTPUT);void loop()for(A;AB;A+) digitalWrite(13,HIGH);delay(2000);digitalWrite(13,LOW);delay(2000);在这里,A就是检测量,它被用于进行变化(专业的术语管A叫变量)。AB(A大于B),A!=B(A不等于B)等等,根据我们的需要来做。A+是检测量变化的方法,这表示每执行一次for 循环,A就自加1,所谓的自加1,就是每执行一次循环,A就会等于上一次循环的时候A的值再加上1.如初始的时候,A等于0,等循环一次之后,A就会等于1,再循环一次,A就会等于2,再循环,A等于3.我们还可以使用A-(表示每次自减1)或者干脆这一行空着,表示A维持状态。不过,如果将这一行空着,我们又不想办法使得A值变化,则会进入所谓的“死循环”。死循环的概念对于for 语句来说,它的意思就是Arduino在执行到这里之后就会没完没了地执行“”之内的代码。换一种方法,我们用if 语句来解决这个亮100次的方法。if语句的格式:if(检测量与目标量的比较方法)放入需要执行的代码1else放入需要执行的代码2即:在“()”之内,如果“检测量与目标量的比较方法”被满足则执行“”内的程序。如果不满足则执行“else”后面的“”中的内容。当然,else放入需要执行的代码2部分也可以省略。这表示if循环执行被满足就执行什么,而如果不满足,则跳出循环,往后面执行。实际的代码如下:int i=0;void setup()pinMode(13,OUTPUT);void loop()if(i100)digitalWrite(13,HIGH);delay(2000);digitalWrite(13,LOW);delay(2000);i+;2.7 我是个感性的人,我希望L灯根据我的意愿亮我希望亮的次数前面的章节中,我们都是使得L灯在根据我们事先编辑好的程序所定义的规则而在点亮和熄灭。那么,现在,如果我们提出这样的课题,改怎么办呢?课题:我希望L灯能够根据我希望的点亮次数来实现它的点亮。即:我希望它闪3次之后熄灭,或者,我希望它连续闪4次后熄灭。当然,我们不是哈利波特,所以,我们也没有魔法棒。在我们现在手头只有一台电脑,一块Arduino 主板的情况下。我们告诉Arduino 主板怎么按照我们的意愿来执行点亮L灯的方法,只有一个,就是通过所谓的串口通讯。现在,我们并不需要了解,什么是串口通讯,我们只需要知道怎么折腾就行。第一步:请将如下的代码下载到Arduino中去:String A=Hello! Im your Arduino!;void setup()Serial.begin(9600);void loop()Serial.println(A);delay(1000);然后,我们点Arduino编程界面如下图所示的图标,如果我们的鼠标放在它的上面,在图标的右边会显示“Serial Monitor”的字样。当点了这个图标之后,会弹出如下图所示的一个框子。然后开始往下,一行行的显示:Hello! Im your Arduino!没完没了。显示的速度是1秒种刷出一行新的来。现在,我们来分析它的代码:String A=Hello! Im your Arduino!;这一行的代码,我们给A赋值为“hello!Im your Arduino!”这里简单说明一下变量,和变量类型的概念。在计算机语言的世界,我们如果把信息比喻成若干个苹果,好吧,为了便于形象理解,我们把信息理解为100个又大又圆的苹果,你一双手,哪怕是加上身上的口袋都搬不走。当我们要把这些苹果从果园里面带回家的时候(对应于计算机语言而言,就是,我们需要对信息进行处理的时候),我们就必须使用篮子,把这些苹果统统装起来,然后才能够搬走(处理)。那么,比照搬运苹果的篮子,在计算机语言世界,这个篮子就是所谓的变量。就好像,我们可以可以把篮子叫做“框子”“篮子”“篓子”等等各种 名字,那么,我们也可以随心所欲地设定变量的名称(更加严格的来说,有一些名字是不能取的,即所谓的关键字的概念,但是,我们现在可以暂时不关注)。如上面的String A=Hello! Im your Arduino!;其中A 就是所谓的变量(篮子),这个变量被装入了Hello! Im your Arduino! 这个信息。而两个双引号【】的作用表示,在双引号之间的内容是文本内容。对于A,我们可以进行几乎是任意的修改。我们可以把A 写成 dog ,duck,fish 。随便你写什么。而所谓的变量类型,就是,在计算机语言的世界,我们必须说明,我们的容器将要用来装什么东西。就好像物理世界中有各种各样的容器那样。竹簸箕适合用来装泥土,但是,并不适合用来装水。而矿泉水瓶子则适合用来装水,如果你拿这个玩意来搬运1立方米的泥土,呃,我相信你不会这么笨。变量也分为各种各样的类型,而且规定得更加严格。有些变量,里面只能够放数字,如1,2,3,4,5,6.有些变量,里面只能一个一个的字母,如A,B,C,D甚至有些变量更加变态,里面只能放“是”和“否”。什么样的变量适合放什么什么数据进去。可以在我们未来的学习中不断地进行了解。在我们前面的学习中,我们已经接触了int,String 两种变量类型。int 类型,即所谓的“整型”,当它修饰了某个变量之后(所谓的修饰,就是放在变量之前,如int A, 就表示 A 用int 进行了修饰),这个变量就只能够放整型的信息进去。它对于Arduino 来说,被int 修饰之后的名称为A的变量,它就可以装入从-32768到32768之间的任何一个数。Stirng 类型,即所谓的“字符串类型”,当它修饰某个变量之后,这个变量几乎可以塞一本小说的字数进去。特别需要注意一点,在一个完整的程序里面,变量只能够被定义一次。不能被定义两次。 言归正传,我们现在了解了String A=Hello! Im your Arduino!;表示了什么意思。我们可以这么理解: 我们定义了一个命名为A的篮子(变量),这个篮子(变量)是属于装入String类型信息的篮子(变量),通过等号“=”,我们将等号右边的字符串:Hello! Im your Arduino!装入了A中。void setup()Serial.begin(9600);这一行是什么意思?如果直观地进行理解,我们可以理解为我们向arduino 下达了如下的命令:串口,准备开始工作,按照9600波特率的通讯速率做好准备这一行规定了串口使用什么样的波特率进行通讯。如何理解波特率?波特率我们可以理解为Arduino 和电脑在进行沟通的时候,选择什么样的“说话”速度。不止Arduino。所有的电子产品都比较笨蛋,我们人类在使用它们进行工作的时候都必须不厌其烦地告诉进行相互之间通讯的两台电子产品:你们必须用什么样的速度进行通讯。即:你们每秒钟只许说多少个字,不许多!也不许少!波特率我们通常使用9600,有时候也使用4800,115200等等之类的速率。当然,和人们进行说话的时候所需要控制的那样,周围环境越吵的时候,说话的两个人就会尽量把说话的速度降下来。当环境的干扰,通讯的距离越远。我们则越倾向于将通讯的波特率降低下来。但是,这是一个两难选择,一方面是不出错,一方面是在同样地时间里面尽量传送尽可能多的信息。因此,Serial.begin(9600);这一句。小括号中的9600.并不是确定的数。它只要和左图中箭头所指的数字一样就行了。目前,串口通讯支持的波特率有如下几种。所以,请记住了,可以在左图中任意进行选择,但是,千万别写出个9100,那就错大发了。通常我们推荐使用9600 和115200两种。别的通讯,我们一般不用。我们再往下一句:Serial.println(A);这一句我们可以这么理解:串口,将变量A通过串口传输到计算机去,记得在传送完之后,同时传送一个换行符号
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 17260-2025亚麻纤维细度的测定气流法
- 2024年大庆辅警招聘考试题库及答案详解(有一套)
- 2024年大足县辅警协警招聘考试真题含答案详解(模拟题)
- 2023年赣州辅警协警招聘考试真题完整参考答案详解
- 2024年城口县辅警协警招聘考试真题附答案详解(综合卷)
- 2023年阿克苏辅警协警招聘考试备考题库附答案详解(研优卷)
- 2023年黑龙江辅警招聘考试真题及答案详解(名师系列)
- 2023年铜陵辅警协警招聘考试备考题库及答案详解(典优)
- 2024年双鸭山辅警协警招聘考试备考题库及完整答案详解一套
- 2024年佳木斯辅警招聘考试真题及答案详解(夺冠系列)
- 第01讲 赏析小说形象(知识清单)(全国通.用)解析版-2026年高考语文一轮复习讲练测
- 风电场防寒防冻知识培训课件
- 难点解析-人教版八年级物理上册第5章透镜及其应用-凸透镜成像的规律综合测试试题(含详细解析)
- 国开2025年秋《心理学》形成性考核练习1-6答案
- 历史校本课程
- 2025年度全国少先队知识测试题(含答案)
- 2026春夏·淘宝天猫运动户外鞋服趋势白皮书
- 2025年秋季学期国家开放大学《中国近现代史纲要》专题测验1-7答案
- 软装进场流程图
- 护理组长述职报告2025
- 智慧树知道网课《工程伦理学》课后章节测试答案
评论
0/150
提交评论