机器人技术等级考试四级AduinoC语言学习基础:闪烁LED与流水LED
![e6318921aaa298c33d94c7e19b6662a0.png](https://img-blog.csdnimg.cn/img_convert/e6318921aaa298c33d94c7e19b6662a0.png)
一、 发光二极管介绍
1、 什么是发光二极管
发光二极管简称为 LED。由镓(Ga)与砷(AS)、磷(P)的化合物制成的二极管,当电子与空穴复合时能辐射出可见光,因而可以用来制成发光二极管,在电路及仪器中作为指示灯,或者组成文字或数字显示。磷砷化镓二极管发红光,磷化镓二极管发绿光,碳化硅二极管发黄光。
![fe4b0f14238a708d4ed05f7f3310cf68.png](https://img-blog.csdnimg.cn/img_convert/fe4b0f14238a708d4ed05f7f3310cf68.png)
图 1.1 各种颜色的发光二极管
它是半导体二极管的一种,可以把电能转化成光能;常简写为 LED。发光二极管与普通二极管一样是由 PN 结组成,也具有单向导电性。当给发光二极管加上正向电压后,从 P 区注入到 N 区的空穴和由 N 区注入到 P 区的电子,在 PN 结付近数微米内分别与 N 区的电子和 P 区的空穴复合,产生自发辐射的荧光。不同的半导体材料中电子和空穴所处的能量状态不同。当电子和空穴复合时释放出的能量多少不同,释放出的能量越多,则发出的的光波长越短。常用的是发红光、绿光或黄光的二极管。
2、工作原理
发光二极管的反向击穿电压约 5V。它的正向伏安特性曲线很陡,使用时必须串联限流电阻以控制通过管子的电流。限流电阻 R 可用下列计算:
R=(E-VF)/I;
式中 E 为电源电压,VF 为 LED 的正向压降,I 为 LED 的一般工作电流。发光二极管的工作电压一般为 1.5~2.0V,其工作电流一般为 10~20MA。所以在 5V 的数字逻辑电路中,可使用 220 欧作为限流电阻。
3、Led 灯的内部结构与连线
发光二极管的两根引线中较长的一根为正极,应连接电源正极。有的发光二极管的引线一样长,但管壳上有一凸起的小舌的引线是正极。如下图所示:
![7957c871a1c2f2f4ca29fe4251390238.png](https://img-blog.csdnimg.cn/img_convert/7957c871a1c2f2f4ca29fe4251390238.png)
图 1.2 发光二极管内部结构图
LED 灯有两种连线方法:当 led 灯的阳极通过限流电阻与板子上的数字 I/O 相连,数字口输出高电平时,led 导通,发光二极管发出亮光;数字口输出低电平时,led 截止,发光二极管熄灭。如图:
![b0c02377730a9a1670ca5cb58fe82004.png](https://img-blog.csdnimg.cn/img_convert/b0c02377730a9a1670ca5cb58fe82004.png)
图 1.3 发光二极管接线方法 1
当 led 灯的阴极与板子上的数字 I/O 口相连时,数字口输出高电平,led 截止,发光二极管熄灭;数字口输出低电平,led 灯导通,发光二极管点亮。
![14e703ca2e0d972fb6e0a069da820c69.png](https://img-blog.csdnimg.cn/img_convert/14e703ca2e0d972fb6e0a069da820c69.png)
图 1.4 发光二极管接线方法 2
本实验选择了接线方法 1 连接发光二极管,将 220 欧电阻的一端插在 Prototype Shield 扩展板上的第 8 个 digital I/O 口,电阻的另一端插在面包板上,电阻和发光二极管通过导线相连,发光二极管的负端插在面包板上与 GND 相连。具体连接如图:
![6435dd06f8876de6de580d87706f66b1.png](https://img-blog.csdnimg.cn/img_convert/6435dd06f8876de6de580d87706f66b1.png)
图 1.5 发光二极管具体连线
简单的控制一个 led 灯的闪烁实验
1、实验器件
■ Led 灯:1 个
■ 220 欧的电阻:1 个
■ 多彩面包板实验跳绳:若干
2、实验连线
按照图 1.5 将发光二极管连接到数字的第 10 引脚。这样我们就完成了实验的连线部分。
3、实验原理
先设置数字 10 引脚为高电平电亮 led 灯,然后延时 1S,接着设置数字 8 引脚为低电平
熄灭 led 灯,再延时 1s。这样使 led 灯亮 1s、灭 1s,在视觉上就形成闪烁状态。如果想让
led 快速闪烁,可以将延时时间设置的小一些,但不能过小,过小的话人眼就识别不出来了,
看上去就像 led 灯一直在亮着;如果想让 led 慢一点闪烁,可以将延时时间设置的大一些,
但也不能过大,过大的话就没有闪烁效果了。
4、程序代码
直接复制这个代码到软件的编程界面就好了。
程序代码如下:
//机器人包老师(玩得趣科教俱乐部)
int LED = 10;//定义数字接口 10,对应
void setup()
{
pinMode(LED,OUTPUT);//设置数字 10 口为输出接口,Arduino 上我们用到的 I/O 口都要进行类似这样的定义。
}
void loop() //死循环体
{
digitalWrite(LED,HIGH);//IO 口 10 设置为高电平,点亮数字 10 口 LED
delay(500);//延时 500MS
digitalWrite(LED,LOW);//IO 口 10 设置为低电平,熄灭数字 10 口 LED
delay(500);//延时 500MS
}
从 Arduino 的教程中我们可以知道,Arfuino 语言是以 setup()开头,logo()作为主
体的一个程序构架。Setup()是用来初始化变量,管脚模式,调用库函数等等,此函数只运
行一次。本程序在 setup()中用输入输出模式定义函数 pinMode (pin,mode),将数字的第
10 引脚设置为输出模式。
Loop()函数是一个循环函数,函数内的语句周而复始的循环执行,本程序在 loop()中先用
数字 IO 口输出电平定义函数 digitalWrite(pin,value),将数字 10 口定义为高电平,点亮 led
灯;接着调用延时函数 delay(ms)(单位 ms)延时 1000ms,将发光二极管亮 1s;再用数字 IO
口输出电平定义函数 digitawrite(pin,value)将数字 10 口定义为低电平,熄灭 led 灯;接着
再调用延时函数 delay(ms)(单位 ms)延时 1000ms,让发光二极管熄灭 1s。因为 loop()函数
是一个循环函数,所以这个过程会不断的循环。
5、下载程序
按照 arduino 教程中的程序下载方法将本程序下载到实验板中。
6、程序功能
将程序下载到实验板后我们可以观察到,发光二极管以 1s 的时间间隔不断的闪烁。
广告灯效果实验
1、实验器件
■ Led 灯:6 个
■ 220 欧的电阻:6 个
■ 多彩面包板实验眺线:若干
2、实验连线
然后按照二极管的接线方法,将六个 LED 灯依次接到数字 1~6 引脚上。如图:
![15d9f6e7a17b145ed67958e0454ace53.png](https://img-blog.csdnimg.cn/img_convert/15d9f6e7a17b145ed67958e0454ace53.png)
图 1.6 广告灯实验的接线
3、实验原理
在生活中我们经常会看到一些由各种颜色的 led 灯组成的广告牌,广告牌上各个位置上
的 led 灯不断的亮灭的变化,就形成各种不同的效果。本节实验就是利用 led 灯编程模拟广
告灯效果。在程序中我们设置 led 灯亮灭的次序和时间,这样就可以组成不同的效果。样式一子程序:led 首先从左边的绿灯开始间隔 200ms 依次点亮六个 led 灯。灯闪烁子程序:六个 led灯首先全部点亮,接着延时 200ms 最后六个 led 灯全部熄灭,这个过程循环两次就实现了
闪烁的效果。样式二子程序设置 k 和 j 的值让中间的两个黄灯先亮,接着让挨着两个黄灯两
边的红灯亮,最后让两边的绿灯亮;执行一遍后改变 k 和 j 的值让两边的绿灯先熄灭,接着
两边的红灯熄灭,最后中间的黄灯熄灭。样式三子程序:设置 k 和 j 的值,让两边的绿灯亮
400ms 后再熄灭,接着让两边的红灯亮 400ms 后再熄灭,最后让中间的两个黄灯亮 400m后熄灭;执行一遍后改变 k 和 j 的值让两个红灯亮 400ms 后熄灭,接着让两边的绿灯400ms 后熄灭。
![ea35c285496dadb11190873179492890.png](https://img-blog.csdnimg.cn/img_convert/ea35c285496dadb11190873179492890.png)
4、程序代码
直接复制这个代码到软件的编程界面就好了。
程序代码如下:
//机器人包老师(玩得趣科教俱乐部)
int Led1 = 1;//定义数字接口 1
int Led2 = 2;//定义数字接口 2
int Led3 = 3;//定义数字接口 3
int Led4 = 4;//定义数字接口 4
int Led5 = 5;//定义数字接口 5
int Led6 = 6;//定义数字接口 6
void style_1(void)
{
unsigned char j;
for(j=1;j<=6;j++)//每隔 200ms 依次点亮 1-6 引脚相连的 LED 灯
{
digitalWrite(j,HIGH);//点亮 J 引脚相连的 LED 灯
delay(200);//延时 200ms
}
for(j=6;j>=1;j--)//每隔 200ms 依次熄灭 6-1 引脚相连的 LED 灯
{
digitalWrite(j,LOW);//熄灭 J 引脚相连的 LED 灯
delay(200);//延时 200ms
}
}
//灯闪烁子程序
void flash(void)
{
unsigned char j,k;
for(k=0;k<=1;k++)//闪烁两次
{
for(j=1;j<=6;j++)//点亮 1~6 引脚相连的 led 灯
digitalWrite(j,HIGH);//点亮于 j 引脚相连的 led 灯
delay(200);//延时 200ms
for(j=1;j<=6;j++)//熄灭 1~6 引脚相连的 led 灯
digitalWrite(j,LOW);//熄灭与 j 引脚相连 dled 灯
delay(200);//延时 200ms
}
}
//led 灯花样显示样式 2 子程序
void style_2(void)
{
unsigned char j,k;
k=1;//设置 k 的初值为 1
for(j=3;j>=1;j--)
{
digitalWrite(j,HIGH);//点亮灯
digitalWrite(j+k,HIGH);//点亮灯
delay(400);//延时 400ms
k +=2;//设置 k 的值加 2
}
k=5;//设置 k 的值为 5
for(j=1;j<=3;j++)
{
digitalWrite(j,LOW);//熄灭灯
digitalWrite(j+k,LOW);//熄灭灯
delay(400);//延时 400ms
k -=2;//设置 k 的减 2
}
}
//led 灯花样显示样式 3 子程序
void style_3(void)
{
unsigned char j,k;
k=5;//设置 k 的值为 5
for(j=1;j<=3;j++)
{
digitalWrite(j,HIGH);//点亮灯
digitalWrite(j+k,HIGH);//点亮灯
delay(400);//延时 400ms
digitalWrite(j,LOW);//熄灭灯
digitalWrite(j+k,LOW);//熄灭灯
k -=2;//设置 k 的减 2
}
k=3;//设置 k 的值为 3
for(j=2;j>=1;j--)
{
digitalWrite(j,HIGH);//点亮灯
digitalWrite(j+k,HIGH);//点亮灯
delay(400);//延时 400ms
digitalWrite(j,LOW);//熄灭灯
第 13 页 共 14 页
digitalWrite(j+k,LOW);//熄灭灯
k +=2;//设置 k 的加 2
}
}
void setup()
{
unsigned char i;
for(i=1;i<=6;i++)//依次设置 1-6 个数字引脚为输出模式
pinMode(i,OUTPUT);//设置第 i 个引脚为输出模式
}
void loop()
{
style_1();//样式 1
flash();//闪烁
style_2();//样式 2
flash();//闪烁
style_3();//样式 3
flash();//闪烁
}
程序代码中用到的:
For(i=1;I<=6;i++)//依次设置 1~6 个数字引脚为输出模式
PinMode(i,OUTPUT);//设置第 i 个引脚为输出模式
这是一个 for 循环,它的一般形式为:for(;;)语句;
初始化总是一个赋值语句,它用来给循环控制变量每赋除值;条件表达式是一个关系表达式,
它决定什么时候退出循环;增量定义循环控制变量每循环一次后按什么方式变化。这三个部
分之间用";"分开。例如 for(i=1;i<=10;i++)语句;上例中先给"i"赋初值 1,判断"i"
是否小于等于 10,若是则执行语句,之后值增加 1.再重新判断,直到条件为假,即 i>10
时,结束循环。
5、下载程序
按照 arduino 教程中的程序下载方法将本程序下载到实验板中。
6、程序功能
将程序下载到实验板后我们可以观察到,六个 led 不断的循环执行样式——子程序->闪烁
子程序—>样式子程序—>闪烁子程序—>样式二子程序—>闪烁子程序—>样式三子程序。
在掌握了以上两个程序后,大家可以充分发挥自己的想象,编写出自己想要的 led 灯效果,
玩转多彩 led 灯。