一、实验目的
通过本实验,熟悉Arduino程序设计的基本语法及对电路板各端口电压的读取和写入方法,能通过开关控制LED灯的亮起和熄灭。
二、实验要求
1、使用ESP 8266电路板、LED灯、开关、电阻及导线搭建实验电路,并编写相应程序实现开关控制LED灯的闪烁效果:不按开关时绿灯亮,按下开关时2盏红灯闪烁。
2、修改上述实验中的电路及程序代码,实现模拟交通信号灯的效果。
三、实验过程
1、开关控制的闪烁LED
(1)分别使用导线将电路板3V3连接到面包板电源正极总线,将GND连接到面包板电源负极总线。
(2)放置1个绿色LED和2个红色LED在面包板上,注意各针脚均需要在不同行上,分别使用3个1K电阻连接各LED的负极(较短的针脚)与面包板电源负极总线。
(3)使用导线将绿色LED的正极(较长的针脚)连接到电路板的D5(GPIO14)口;使用导线将中间红色LED的正极连接到电路板的D6(GPIO12)口;使用导线将另一个红色LED的正极连接到电路板的D7(GPIO13)口。
(4)放置1个开关横跨在面包板中间小沟上,其中一个针脚使用导线连接到面包板电源正极,另一个针脚使用导线连接到电路板D0(GPIO16)口。电路连接如图所示。
图3-1实验电路连接图
(5)在新建的Arduino程序窗口中输入如下代码:
//初始化各接口
void setup() {
pinMode(14, OUTPUT);//D5(GPIO14)接绿色LED,设置为输出
pinMode(12, OUTPUT);//D6(GPIO12)接中间红色LED,设置为输出
pinMode(13, OUTPUT);//D7(GPIO13)接外侧红色LED,设置为输出
pinMode(16, OUTPUT);//D0(GPIO16)接开关,设置为输出
}
//循环调用
void loop() {
//读取端口16的状态,当为低电平(即开关没有按下)时
if(digitalRead(16)==LOW) {
//绿灯亮,两盏红灯不亮
digitalWrite(14, HIGH);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
//当开关按下时
else {
//绿灯灭,D7接口红灯亮,持续0.5秒
digitalWrite(14, LOW);
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
delay(500);
//D7接口红灯灭,D6接口红灯亮,持续0.5秒
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
delay(500);
}
}
(6)将USB线缆插入计算机,上传程序后观察LED变化情况。
该实验的结果是:初始状态绿色LED亮,2个红色LED灭,当按下开关时,绿色LED熄灭,2个红色LED交替点亮和熄灭(亮灭状态每次持续0.5秒)。
2、交通红绿灯
(1)将前1个实验中的3个LED灯拆下,在原绿色LED的位置放置1个红色LED,原中间红色LED的位置放置一个黄色LED,另一个位置放置一个绿色LED,其余接线不变。
(2)在新建的Arduino程序窗口中输入如下代码:
//初始化各接口
void setup() {
pinMode(14, OUTPUT);//D5(GPIO14)接红色LED,设置为输出
pinMode(12, OUTPUT);//D6(GPIO12)接黄色LED,设置为输出
pinMode(13, OUTPUT);//D7(GPIO13)接绿色LED,设置为输出
pinMode(16, OUTPUT);//D0(GPIO16)接开关,设置为输出
}
//循环调用
void loop() {
//读取端口16的状态,当为低电平(即开关没有按下)时
if(digitalRead(16)==LOW) {
//红灯、绿灯不亮,黄灯持续闪烁
digitalWrite(13, LOW);
digitalWrite(14, LOW);
digitalWrite(12, HIGH);
delay(500);
digitalWrite(12, LOW);
delay(500);
}
//当开关按下时
else {
//红灯亮,持续3秒
digitalWrite(12, LOW);
digitalWrite(13, LOW);
digitalWrite(14, HIGH);
delay(3000);
//红灯、黄灯一起亮,持续1秒
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
digitalWrite(14, HIGH);
delay(1000);
//绿灯亮,持续3秒
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
digitalWrite(14, LOW);
delay(3000);
//绿灯闪烁3次
digitalWrite(13, LOW);
delay(500);
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
digitalWrite(13, HIGH);
delay(500);
//黄灯亮,持续1秒
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
delay(1000);
}
}
(6)将USB线缆插入计算机,上传程序后观察LED变化情况。
该实验的结果是:初始状态黄色LED持续闪烁,当按下开关时,红色LED亮起3秒,然后红色黄色LED一起亮起1秒,之后绿色LED亮起3秒,在绿色LED闪烁3次后黄灯亮起1秒,如此循环,模拟现实中的交通信号灯状态。
四、实验扩展
1、可以更换电路板上连接LED的接口,但在程序代码中应注意各接口的号码。
2、可以通过修改程序代码实现各种LED亮灭的效果,例如霓虹灯、电子显示屏等。