162247| 62
|
[入门教程] Arduino教程 02 LED灯闪烁「DFR0100」 |
(;´Д`) 该教程实验平台:Arduino入门套件 回顾一下Lesson 1的内容,我简单分了以下几点:了解Arduino软件编辑环境 -- Arduino IDE
让我们开始吧!从LED开启我们的Arduino之旅吧!你将学会像控制按钮输入一样控制 Arduino的各种输出。在硬件方面,你将学习到有关LED、按钮、和电阻的内容,包括上拉和下拉电阻的知识,这对于之后的项目非常重要。在这个 过程中,你将接触Arudino编程,编程其实也没你想象的那么困难。 让我们从一个最基本的项目,使用Arduino控制一个外部LED的闪烁。 项目一 LED闪烁在第一个项目中,我们将重复使用之前的那个测试代码Blink程序。 有所不同的是,这里我们需要外接一个LED到数字引脚,而不是使用焊在开发板上的LED 13(也就是“L”灯)。便于我们能清晰的认识LED的工作原理及一些硬件电路的搭建。 STEP 1:所需元件1 × DFduino UNO R3(以及配套USB数据线)
STEP 2:硬件连接首先,从我们的套件中取出Prototype shield扩展板和面包板,将面包板背面的双面胶歇下,粘贴到Prototype shield扩展板上。再取出UNO,把贴有面包Prototype shield扩展板插到UNO上。取出所有元件,按照图1连接。 用绿色与红色的面包线连接,使用面包板上其他孔也没关系,只要元件和线的连接顺序与上图保持一致即可。 确保LED连接是否正确的,LED长脚为+,短脚为-,完成连接后,给Arduino接上USB数据线,供电,准备下载程序。
图中的蓝色与红色的线用彩色面包线连接,使用面包板上其他孔也没关系,只要元件和线的连接顺序与上图保持一致即可。 确保LED连接是否正确的,LED长脚为+,短脚为-,完成连接后,给Arduino接上USB数据线,供电,准备下载程序。 STEP 3:输入代码打开Arduino IDE,在编辑框中输入样例代码1-1所示代码。(输入代码也是一种学习编程的过程,虽然提供代码的压缩包,但还是建议初学者自己输入代码,亲身体验一下。) 样例代码 1-1:
输入完毕后,点击IDE的“校验(Verify)”,查看输入代码是否通过编译。如果显示没有错误,单击“下载(UpLoad)”,给Arduino下载代码。以上每一步都完成了的话,你应该可以看到面包板上的红色LED每隔一秒交替亮灭一次。 现在让我们来回顾一下代码和硬件,看看它们是如何工作的。 代码回顾代码的第一行如下所示: 这是代码中的说明文字,可以叫做注释。是以”//”开始,这个符号所在行之后的文字将不被编译器编 译。注释在代码中是非常有用的,它可以帮助你理解代码,如果项目比较复杂,自然而然,代码也会随之非常的长,而此时注释就会发挥很大作用,可以快速帮你回忆起这段代码的功能。同样,当把你的代码分享给别人的时候,别人也会很快理解你的代码。 又如以下文字: 这是另外一种写注释的方式,用“/.../”,这个符号的作用是可以注释多行,这也是与上一种注释方式的区别之处。在/和/中间的所有内容都将被编译器忽略,不进行编译。 IDE将自动把注释的文字颜色变为灰色。 注释接下来的一行是: 在声明的最后用一个“;”来表示这句语句的结束。分号必不可少!必须切换到英文输入法中的分号。
接下来是setup()函数: setup()函数内只有一条语句,那就 是pinMode函数。
函数格式如下: 如果让你设置数字引脚2为输入模式,你会吗?
我们接着往下看,程序现在进行到我们的主函数loop():
在 setup() 函数中初始化和定义了变量后,就开始执行 loop() 函数。顾名思义,该函数在程序运行过程中不断的循环,loop()函数中的每条语句都逐次进行,直到函数的最后,然后再从loop函数的第一条语句再次开始,三次、四次......一直这样循环下去,直到关闭Arduino或者按下重启按钮。 在这个项目中,我们希望LED灯亮,保持1秒,然后关闭,保持1 秒,然后一直重复上面的动作。那么在Arduino的语句中,该怎么实现呢? 先看loop()函数内的第一条语句,这里我们涉及到了另外一个函数就是digitalWrite()。
函数格式如下: 这个函数的意义是:引脚pin在 pinMode()的中被设置为OUTPUT模式时,其电压将被设置为相应的值,HIGH为5V(3.3V控制板上为 3.3V),LOW为0V。我们这里就是给引脚10(ledPin)一个5V的高电平,点亮了引脚10这个LED。 我们这里强调了,pinMode()被设置为OUTPUT时,才用到 digitalWrite()。这是为什么呢?看一下下面这段话。
接着的一句语句:
delay()函数,用于延时等待。等待1000毫秒(1000毫秒也就是1秒,以此类推吧!)。我们举一反三一下,如果我们需要延时2秒呢?答案:delay(2000); 接着看下一句是:
有了上面的引导,这句话是不是很容易理解了呢?这句话意思为,为引脚10一个0V的低电平,也就是熄灭LED。 然后再延时1秒。之后回到loop()函数开始部分,循环运行。 现在我们知道代码是如何运作的了,让我们来个小小的改动吧!让LED保持关闭5秒,然后快速闪烁 一下(250毫秒),就像汽车报警器上的LED指示灯那样。试着写一 下: 答案:
通过改变LED开和关的时间,可以产生不同的效果,开关时间短,则感觉动感,开关时间长,则感觉柔和。外面的灯光效果都是基于这样的原理。让我们再来看下硬件。看看硬件又是如何工作的。 STEP 4: 硬件回顾面包板面包板是一种可重复使用的非焊接的元件,用于制作电子线路原型或者线路设计。简单的说,面包板是一种电子实验元件,表面是打孔的塑料,底部有金属条,可以实现插上即可导通,无需焊接的作用。面包板该怎么使用?其实很简单,就是把电子元件和跳线插到板子上的洞洞里,具体该怎么插,我们就要从面包板的内部结构上说了。 IC插上后,因为引脚多,一般很难取下,硬来很容易弄弯引脚,这个槽刚好可以用镊子之类的东西将IC慢慢取下。 从上图我们可以看到,面包板分为上下两个部分,蓝线指出的纵向每5个孔是相通的。 电阻下一个要说的元件是电阻。电阻的单位是 Ω。电阻会对电流产生一定的阻力,引起它两端电压的下降。可以将电阻想象成一个水管,它比连接它的管子细一点,当水(电流)流入电阻,因管子变细,水流 (电流)虽然从另一端出来,但水流减小了。电阻也是一样的道理,所以电阻可以用来给其他元件减流或减压。 电阻有很多用处,对应名称也不同,上拉电阻,下拉电阻,限流电阻等。我们这里用作限流电阻。在这个例子里,数字引脚10输出电压为5V,输入电流40mA(毫 安)直流电。普通的LED需要2V的电压和35mA左右的电流。因此如果想以LED的最大亮度点亮它,需要一个电阻将电压从5V降到2V,电流从40mA减到35mA。这个电阻起限流的作用。 如果不连电阻会怎样呢?流过LED的电流过过大(可以理解为水流过大,水管爆破了!),会使LED烧 掉,就会看到一缕青烟并伴随着糊味儿~ 这里具体对电阻值选取的计算就不做说明了,只要知道在接LED时需要用到一个100Ω左右的电阻就可以了。大一点也没关系,但不能小于100Ω。如果电阻值选的过大的话,LED不会有什么影响,就是会显的比较暗。很容易理解,电阻越大,减流或减压效果更明显了。LED 随电流减小而变暗。 电阻色环读值我们元器件的包装袋上已经明确标明了各个元件的名称。但不排除有时候不小心标签掉了,可是手头又没有可以测量的工具,那该怎么办 呢?有个方法就是从电阻上的色环来读取电阻值。我们这里就不做详细说明了。感兴趣的可以读读看阻值。 提供一个五色坏电阻阻值在线计算器: 不同的LED灯所需电压也有不同,推荐《LED常识》一贴。 LED最后要说就是LED,标准的发光二极管,是二极管中的一种。二极管是一种只允许电流从一个方向流进的 电子器件。它就像一个水流系统的中的阀门,但是只允许一个方向通过。如果电流试图改变流动方向, 那么二极管就将阻止它这么干。所以,二极管在电路中的作用通常是用来防止电路中意外地电源与地连接,避免造成损坏其他元件。 LED也是一种二极管,会发光的二极管。LED能发出不同颜色和亮度的光线,包括光谱中的紫外线和红外线。(比如我们经常使用的各类 遥控器上面的LED也是其中一种, 与普通的发光二极管长的一样,只是发出的光我们人眼看不到,我们也称之为红外发射管。) LED如果仔细观察LED,你会注意到,LED引脚长度不同,长引脚为+,短引脚为-。那如果正负接反会怎么样呢?下面这张图就说明问题了,接反就不亮了呗。下图是不是还缺个电阻呀,细心的你发现了吗? 现在你知道了各元件的功能及整个项目中软硬件是如何工作的,让我们尝试做其他好玩儿的东西吧! 动手试一试尝试换不同阻值的电阻,看看LED灯的变化。
|
你好,为什么总是显示上传出错(程序上的上传按钮就是教程的下载按钮),错误提示:Arduino:1.8.5 (Windows 7), 开发板:"Arduino/Genuino Uno" 项目使用了 940 字节,占用了 (2%) 程序存储空间。最大为 32256 字节。 全局变量使用了9字节,(0%)的动态内存,余留2039字节局部变量。最大为2048字节。 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xd9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xd9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xd9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xd9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xd9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xd9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xd9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xd9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xd9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xd9 上传出错。 在文件 -> 首选项开启 “编译过程中显示详细输出”选项 这份报告会包含更多信息。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed