查看: 12271|回复: 2

Arduino教程中级 项目一 点亮一盏灯

[复制链接]

项目一 点亮一盏灯

本系列教程配套硬件套件新版Arduino中级套件


在前面几篇前奏中,我们已经对Arduino有了简单的了解,整个装置工作是依赖于哪些部分。也了解了电子世界最重要两个量,数字量与模拟量。接下来我们就正式开始做东西了,第一个要做的必须是最经典的,最经典的莫过于“blink”。
其实,前面在一开始驱动安装的时候就用过这段代码了,区别在于这里将不使用板子上的LED 13(也就是“L”灯),而是在数字引脚13连接一个LED。

所需元件

1×  数字食人鱼红色LED发光模块
image001.jpg


*之后的项目将都不重复罗列UNO与I/0传感器扩展板,但是!每次都还是需要用到的。

硬件连接

直接把食人鱼红色模块连接到Arduino UNO的数字口13。插上USB线,准备下载程序。


image003.jpg

输入代码

打开Arduino IDE,在编辑框中输入样例代码1-1所示代码。(输入代码也是一种学习编程的过程,虽然提供代码的压缩包,但还是建议初学者自己输入代码,亲身体验一下。)
样例代码 1-1:

//项目一 —— LED 闪烁
     /*
描述:LED每隔一秒交替亮灭一次
     */   
int ledPin = 13;
void setup() {
        pinMode(ledPin, OUTPUT);
}
void loop() {
        digitalWrite(ledPin,HIGH);
        delay(1000);
        digitalWrite(ledPin,LOW);
        delay(1000);
}

     输入完毕后,点击IDE的“校验(Verify)”,查看输入代码是否通过编译。如果显示没有错误,单击“下载(UpLoad)”,给Arduino下载代码。以上每一步都完成了的话,你应该可以看到面包板上的红色LED每隔一秒交替亮灭一次。
   
现在让我们来回顾一下代码,看看它们是如何工作的。


硬件分析(数字输出)

我们从前面几章说的输入输出的角度来看。整个装置只有两个部分,控制与输出。Arduino就是控制设备,LED发光模块就是输出设备。对的,这个整个装置是没有输入设备的。有了这么一分析,我们再看代码就不那么难理解了。


image005.jpg

代码分析

先说下Arduino代码必须具备的两个组成部分:
void setup() {
  // 写入setup代码,只运行一次:
}
void loop() {
  // 写入main代码,重复运行:  
}
Arduino代码必须包含setup()和loop()这两个函数。setup英文中是“设置”的意思。所以setup()函数是用于一些初始化设置的,只在代码一开始时,运行一次。loop是“循环”的意思,只要Arduino不掉电,loop就会不停的重复运行。
   
由于LED是输出设备,所以不难看出,在setup()函数中先初始化LED为输出模式。
函数格式如下:
pinMode(pin,mode)   
这个函数是用来设置Arduino数字引脚的模式的,只用于数字引脚定义是输入(INPUT)还是输出(OUTPUT)。pin指数字引脚号,mode指引脚模式(OUTPUT/INPUT)。  
回头看下代码中,
pinMode(ledPin,OUTPUT);
这句话的意思就是,将ledPin设置为输出模式,中间的逗号可不能省。那ledPin是什么呢?
看下代码的第一句话:
int ledPin = 13;
我们在一开始的时候给13号引脚起了个名字叫做ledPin,所以ledPin就代表了13号引脚。前面的int可不能少!int代表了ledPin是个整数。
明白了这两句话的意思了,如果我们现在需要换个引脚,LED不连接到13号引脚,连接到10引脚,可以怎么写:
pinMode(10, OUTPUT);
只需把pin换成对应的引脚号就行了。
再看下loop()函数,loop函数中就只用到了一个函数digitalWrite()。
函数格式如下:
digitalWrite(pin,value)
这个函数的意义是:引脚pin在pinMode()的中被设置为OUTPUT模式时,其电压将被设置为相应的值,HIGH为5V(3.3V控制板上为3.3V),LOW为0V。
digitalWrite(ledPin,HIGH);   //LED被点亮
digitalWrite(ledPin,LOW);    //LED被熄灭
代码中的,ledPin同样指引脚。写入HIGH时,引脚13就被至高,LED被点亮。写入LOW时,引脚13就被拉低,LED被熄灭。
亮与灭直接还有句语句:
delay(1000);
delay是延时的意思。括号中写入的是毫秒(ms)。所以,delay(1000)就是延时1s的意思。最后实现的就是LED亮一秒,灭一秒,一直无限循环。
细心的朋友可能注意到,代码开始部分有段带“//”和“/*…*/”的文字:
//项目一 —— LED 闪烁
     /*
描述:LED每隔一秒交替亮灭一次
*/
这是代码中的说明文字,可以叫做注释。是以”//”开始,这个符号所在行之后的文字将不被编译器编译。
还有另外一种写注释的方式,用“/*…*/”,这个符号的作用是可以注释多行,这也是与上一种注释方式的区别之处。在/*和*/中间的所有内容都将被编译器忽略,不进行编译。IDE将自动把注释的文字颜色变为灰色。

趣味练习

能否试试变换LED的亮灭速度,让LED保持关闭5秒,然后快速闪烁一下(250毫秒),就像汽车报警器上的LED指示灯那样。
通过改变LED开和关的时间,可以产生不同的效果,开关时间短,则感觉动感,开关时间长,则感觉柔和。


※ 在之后的Arduino学习之旅中,不管你遇到奇奇怪怪的问题,都希望你与我们交流,欢迎登陆我们的DFRobot创客社区!

Lesson1_1.ino

280 Bytes, 阅读权限: 10, 下载次数: 56, 下载积分: 创造力 -1

jiashe2011  见习技师

发表于 2017-2-22 00:48:43

学习!!!!
回复 支持 反对

使用道具 举报

zhouyu77642017  学徒

发表于 2018-8-9 09:44:30

学习学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2019 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail