LED 闪烁实验(1)

LED 小灯实验是比较基础的实验之一,上一个“ Hello World!”实验里已经利用到了Arduino 自带的LED,这次我们利用其他I/O 口和外接直插LED 灯来完成这个实验,我们需要的实验器材除了每个实验都必须的Arduino 控制器和USB 下载线以外的

其它器件如下:

红色M5 直插LED*1:led

100Ω直插电阻*1:电阻

面包板*1:面包板

杜邦线若干:杜邦线

下一步我们按照下面的小灯实验原理图链接实物图,这里我们使用数字10 接口。使用发光二极管LED 时,LED灯珠长脚一端是正极,一定要连接数字10接口。要连接限流电阻,这里为100Ω电阻,否则电流过大会烧毁发光二极管。

小灯实验原理图

1

实物图

2

按照上图链接好电路后,就可以开始编写程序了,我们还是让LED 小灯闪烁,点亮1 秒熄灭1 秒。这个程序很简单与Arduino 自带的例程里的Blink 相似只是将13 数字接口换做10 数字接口。

参考程序如下:

//项目1-LED闪灯器
int ledPin = 10; //定义数字10 接口

void setup()

{

pinMode(ledPin, OUTPUT);//定义小灯接口为输出接口

}

void loop()

{

digitalWrite(ledPin, HIGH); //点亮小灯

delay(1000); //延时1 秒

digitalWrite(ledPin, LOW); //熄灭小灯

delay(1000); // 延时1 秒

}

代码回顾:

//项目1-LED闪灯器

这是你的代码中的说明文字,可以叫它们注释,因为它是以“//”开始的,这个符号后面所有的文字编译器都将忽略。注释在代码中是非常有用的,它帮助你理解代码是如何工作的,如果你的项目非常复杂,代码超过了几百行,甚至几千行,注释是非常重要的,它使你很容易知道每一段代码的左右。你可能会写出一段迷人的代码,但是,你不可能永远记得它是如何工作的,而注释可以使你回忆起代码的功能。同样,如果你要给其他人看你编写的代码,注释将帮助别人理解你的代码。还有另外一种写注释的方式,用/*和*/括起来,例如以下文字:

/*这里面的

所有文字

都将

被编译器忽略*/

arduino IDE将自动把注释文字的颜色转换成灰色。程序接下来的一行是这样的:

int ledPin=10;

这就是所谓的变量,变量是用来存储数据的。在上面的例子里定义了一个变量,类型是int或者说整型。整型表示一个数,范围在32768到32767之间,接下来指定了这个整型数的名字是ledPin,并且给它赋了一个值10。(可以不叫它ledPin,你可以叫它任何你想叫的东西,但是希望你的变量名是有一定意义的,叫它ledPin说明这个变量表示将要去与LED相连的Arduino的引脚。)在这里,使用数字引脚10。在这个声明的结尾是一个分号,它告诉编译器这个声明到此结束。

虽然可以给变量设置任何名字,但在C语言中,变量名必须以一个字母开头,之后可以包含字母、数字和下画线。注意C语言认为大小写字母是不同的。最后,不能使用C语言的任何保留字作为变量名,如main、while、switch等。保留字是常量、变量和函数名,这些都被定义为Arduino语言的一部分。为了避免使用保留字作为变量名,所有保留字在程序中都显示为不同颜色。

想象变量是一个小盒子,在那里存储着东西,在这个程序中,变量在内存中开辟了一个小空间用来存储一个整数,以上的定义表示在变量开辟的存储空间内存了一个数字10。

最后,变量之所以叫变量是因为可以改变它的值。稍后,将对变量进行数学计算以使程序能够做更复杂的事情。

接下来是setup()函数:

void setup{

pinMode(ledPin,OUTPUT);

}
Arduino程序必须包含setup()和loop()两个函数,否则它将不能工作。setup函数只在程序的开头运行一次。在这个函数里可以在主循环开始前为程序设定一些通用的规则,如设置引脚形式、设置波特率等。一般情况下,函数是一组集合在一个程序块中的代码。例如,如果生成一个函数来完成一系列复杂的数学计算,它有好几行代码,这些代码可以运行很多次,每次使用这些代码时只要简单地调用函数名即可,而无须每次都把这些代码重新再写一遍。当你开始动手做自己的项目时,你将对函数有更深入的了解。在本程序里,setup()函数只有一行声明。函数从以下形式开始:

void setup()

它告诉编译器函数叫setup,它不返回数据(void),并且不传递参数给它(空括号),如果函数返回整型值,并且需要给它传递一个整型数(如让函数处理)作为参数,它可以写成如下形式:

int myFunc(int x,int y)

在这里,所生成的函数(或一段代码)叫做myFunc。需要给这个函数传递两个整数作为参数,叫做x和y,如果函数运行完成,它将在程序调用函数处返回一个整数值。

函数中的所有代码在两个花括号之间,“{”符号在代码块的开头,“}”符号在代码块的结尾。这两个符号之间的任何东西都是属于这个函数的。(我将在后面进一步详细地说明函数,所以现在请不必着急。)

在这个程序里有两个函数,一个函数叫做setup,它的目的是在主要的loop函数运行之前为程序做必要的设置。

void setup(){

pinMode(ledPin,OUTPUT);

}

setup函数内只有一条语句,那就是pinMode函数,这个函数告诉Arduino设置引脚的模式为输出模式,而不是输入模式。在函数后面的括号内,设定了引脚号和模式(OUTPUT或INPUT),引脚号是ledPin,它在这之前已经被设置为数值10。因此,这条语句只是简单地告诉Arduino数字引脚10被设置为OUTPUT模式。因为setup()函数只运行一次,现在程序移动到主函数loop:

void loop() {

digitalWrite(ledPin, HIGH);

delay(1000);

digitalWrite(ledPin, LOW);

delay(1000);

}

loop()函数是主要的过程函数,只要Arduino打开就一直运行。每一条loop()函数(在花括号内的代码)中的代码都要执行,并按顺序逐个执行,直到函数的最后。然后loop函数再次开始,从函数顶部开始运行,一直这样循环下去,直到关闭Arduino或者按下重启按钮。

在这个项目中,希望LED灯亮,保持1秒,然后关闭,保持1秒,并且重复以上动作。因为你希望反复地做以上动作,所以告诉Arduino要这样做的命令设置在loop()函数内。函数内第一个语句是:

digitalwrite(ledPin,HIGH);

在这个语句中,写一个HIGH或LOW值到引脚(在这个例子里,引脚是数字引脚10),设置一个HIGH到引脚中,将输出一个5V电压到那个引脚,当设置引脚为LOW时,这个引脚变成0V,或者地,因此上面的声明表示输出一个5V电压到引脚10,这就点亮了LED。之后的代码是:

delay(1000);

这条语句只是告诉Arduino在执行下一条语句之前等待1000毫秒(1000毫秒是1秒)。下一条语句是:

digitalwrite(ledPin, LOW);

该语句将关闭数字引脚10的电源,因此会熄灭LED。之后是另外一个延时1000毫秒的语句,然后函数结束。然而,因为这个函数是主loop()函数,所以这个函数将重新从头开始执行。

再一步一步看以上程序,你会发现程序是非常简单的。

//项目1 —— LED 闪灯器

int ledPin = 10;

void setup() {

pinMode(ledPin, OUTPUT);

}

void loop() {

digitalWrite(ledPin, HIGH);

delay(1000);

digitalWrite(ledPin, LOW);

delay(1000);

}

从指定一个名为ledPin的变量开始,向这个变量赋值10。之后,执行setup()函数,此处设置数字引脚10为输出模式。在主程序循环里设置数字引脚10为HIGH,输出为5V,之后等待1秒,关闭数字引脚10的5V电源,等待1秒,之后,loop重新开始执行。只要Arduino上电,LED将持续地交替开关。

现在你已经知道代码是如何工作的了,你可以通过改变代码去打开LED并保持一段不同的时间,关闭LED并保持一段不同的时间。例如,想要持续打开2秒,之后关闭0.5秒,可以按照下面这样做:

void loop() {

digitalWrite(ledPin, HIGH);

delay(2000);

digitalWrite(ledPin, LOW);

delay(500);

}

如果想要LED保持关闭5秒,然后短暂地闪烁一下(250毫秒),如同汽车报警器上的LED指示灯那样,可以这样做:

void loop() {

digitalWrite(ledPin, HIGH);

delay(250);

digitalWrite(ledPin, LOW);

delay(5000);

}

如果想让LED快速开关闪烁,尝试以下方式:

void loop() {

digitalWrite(ledPin, HIGH);

delay(50);

digitalWrite(ledPin, LOW);

delay(50);

}

通过改变LED开和关的时间,可以产生任何你希望看到的效果(当然是在单个LED开和关范围内的效果)。

 

0 Comments
Leave a Reply