本篇将介绍有关LED灯的四个不同类型的实验
实验一:闪烁的LED
实验材料:
- Nano开发板
- 配套USB数据线
- 一个LED灯
- 一个470Ω的电阻
- 若干导线
电路连接图:
把LED和电阻插入面包板, LED灯的负极连接Nano板的GND引脚,LED的正极连入电阻的一端,电阻的另一端接入nano板的A5引脚。
为何本实验需要串联一个电阻?
我们所购买的LED灯最大电流只允许20毫安,能够承受的电压范围在2.0-2.2之间,当其电压超过其所承受范围时,LED灯通过的电流就会快速上升,很容易造成LED灯的损坏,因此需要串联进一个合适的分压电阻才能保证LED灯的正常工作,这样就可以保证即使供电电压出现小幅度的波动时,LED灯仍可以正常工作。
编写代码:
新建sketch,拷贝如下代码替换自动生成的代码并进行保存。
int pin=A5;//LED的管脚
void setup(){
pinMode(pin,OUTPUT);//设置管脚为输出模式
}
void loop() {
digitalWrite(pin,1);//向管脚写入1,设置为高电平,则LED灯亮
}
连接开发板,设置好对应端口号和开发板类型,进行程序下载。
实验现象
LED灯亮起
再写个程序让它闪烁吧
int pin=A5;//连接LEDA5引脚
void setup(){
pinMode(pin,OUTPUT);//设置管脚为输出模式
}
void loop(){
digitalWrite(pin,HIGH);//将管脚设置为高电平,则LED灯亮
delay(1000);//等待1000毫秒
digitalWrite(pin,LOW);//将管脚设置为低电平,则LED灯灭
delay(1000);//等待1000毫秒
}
连接开发板,设置好对应端口号和开发板类型,进行程序下载。
实验现象
LED灯闪烁(亮一秒,暗一秒)
函数讲解
-delay函数:
- 暂停程序指定为参数的时间量(以毫秒为单位)。(一秒钟内有1000毫秒)
- 句法:delay(ms)
- 参数:ms:暂停的毫秒数
实验二:按键控制LED灯
前面介绍了如何使LED闪烁,下面我们来看一下,通过检测按键状态来控制LED灯亮灭,把LED的亮灭变成人为可控制的。
实验材料:
- Nano开发板
- 配套USB数据线
- 一个LED灯
- 一个470Ω的电阻
-2个按钮 -
若干杜邦线
实验中我们用到了轻触按键,常见的有2脚按键和4脚按键,其内部结构如下图所示:
按钮图
当按下按键时,按键两端接通,当放开时,两端再次断开。
电路连接图:
LED与电阻的接法与实验一类似,将按钮左右两端连到A2与GND引脚上。
编写代码
/*
* Digital_Button
* 通过按键控制LED灯亮灭
*/
int buttonPin = A2; // 按键的管脚定义
int ledPin = 9; // LED灯管脚定义
int buttonState = 0; // 存储按键状态值
void setup() {
pinMode(ledPin, OUTPUT); //设置LED管脚输出模式
pinMode(buttonPin, INPUT_PULLUP); //设置按键管脚上拉输入模式
}
void loop() {
buttonState = digitalRead(buttonPin);// 检查按键是否被按下
if (buttonState == HIGH) //如果按键按下,那buttonState应该为高电平
{
digitalWrite(ledPin, HIGH); // 点亮LED
}
else {
digitalWrite(ledPin, LOW); // 熄灭LED
}
连接开发板,设置好对应端口号和开发板类型,进行程序下载。
实验现象
按下按键,LED灯点亮。放开按键,LED灯熄灭。
小贴士
- 由于Arduino上电后,数字I/O管脚处于悬空状态,此时通过digitalRead()读到的是一个不稳定的值(可能是高,也可能是低)。所以通过pinMode()函数设置按键引脚为上拉输入模式(INPUT_PULLUP)。
通俗的说:上拉电阻(pullup resistor),目的是使在断路的时候,这一点变成高电压(5V)。当变成通路的时候,电压就会降下来。- 按键在按下的过程中,有一段接触未接触的不稳定过程,即按键的抖动。在判断按键状态时,通过delay()延时跳过抖动的不稳定状态.
实验三LED灯的减弱增强
本实验通过PWM脉宽调制来控制LED灯亮度。
由已学的PWM知识可知:
在我们的Nano开发板上,第3、5、6、9、10、11引脚具有PWM功能。
通过使用analogWrtie()函数,在指定的引脚上通过高低电平的不断转换输出一个周期固定的方波,通过改变高低电平的占空比,进而得到不同的电压输出。
电路连接图:
编写代码
新建sketch,拷贝如下代码替换自动生成的代码并进行保存
int ledPin = 9;
void setup ()
{
pinMode(ledPin,OUTPUT);
}
void loop()
{
for (int a=0; a<=255;a++) //循环语句,控制PWM亮度的增加
{
analogWrite(ledPin,a);
delay(8); //当前亮度级别维持的时间,单位毫秒
}
for (int a=255; a>=0;a--) //循环语句,控制PWM亮度减小
{
analogWrite(ledPin,a);
delay(8); //当前亮度的维持的时间,单位毫秒
}
}
连接开发板,设置好对应端口号和开发板类型,进行程序下载。
实验现象:
LED灯由亮变暗,又由暗变亮
函数讲解:
analogWrite()
- 功能:analogWrite()实现对引脚设置PWM的要求。可以被用来控制LED等,电机转动,舵机等。
- 句法:analogWrite(pin,value)
- 参数:pin:写入的引脚;value:占空比,在0~255之间。(0时候为关,即LOW;255为开,即HIGH)
- 无返回值
- 使用analogWrite()不需要再用pinMode()设置引脚为输出。
小贴士:
程序中使用analogWrite()函数,通过两个for循环,逐渐改变输出PWM占空比,进而改变LED灯的亮度。两个for循环中都有延时语句。
实验四(高能实验):流水LED
本实验讲解:多个LED依次点亮并以此熄灭的状态
实验材料:
- Nano开发板
- 配套USB数据线
- 5个LED灯
- 5个470Ω的电阻
- 若干杜邦线
电路连接图:
5个LED灯的负极连接到开发板的GND引脚,正极分别连接限流电阻连接到开发板的数字I/O引脚。
实物连接图:
编写代码:
int delayTime = 200;
int ledPin;
void setup()
{
for (ledPin = 2; ledPin < 7; ledPin++) //依次设置2-6个数字引脚为输出模式
{
pinMode(ledPin, OUTPUT); //设置第ledPin个引脚为输出模式
}
}
void loop()
{
for (ledPin = 2; ledPin < 7; ledPin++) //每隔delayTime依次点亮2~6引脚相连的led灯
{
digitalWrite(ledPin, HIGH); //点亮ledPin引脚相连的led灯
delay(delayTime);//延时delayTime
}
for (ledPin = 6; ledPin > 1; ledPin--) //每隔delayTime依次熄灭6~2引脚相连的led灯
{
digitalWrite(ledPin, LOW); //熄灭ledPin引脚相连的led灯
delay(delayTime);//延时delayTime
}
}
连接开发板,设置好对应端口号和开发板类型,进行程序下载。
实验现象:
五个LED灯依次点亮,又依次熄灭,如此往复循环。
小贴士:
- 在setup部分通过for循环将2 ~ 6号引脚设置为输出模式。在loop部分,通过两个for循环依次点亮2 ~ 6号LED灯,依次熄灭6 ~ 2号LED灯,使用的依然是digitalWrite函数。
- 延时时间定义为200,你可以改变它来控制流动速度。