一、实验目的
通过本实验,熟悉倾斜开关的工作原理、应用场景及安装使用过程,掌握在Arduino项目中通过倾斜开关控制LED的方法,并能使用倾斜开关制作1个简易计时器。
二、实验要求
1、使用ESP 8266电路板、倾斜开关(如图所示)、LED、电阻和导线搭建实验电路,并编写相应Arduino程序代码,实现通过倾斜开关控制LED点亮和熄灭的效果。
图12-1倾斜开关
2、在第1步实验中再添加3个LED灯及相应的电阻和导线,修改实验代码,通过定时依次点亮LED灯的方式进行模拟计时,全部LED点亮后闪烁所有LED灯表示计时结束,在任何情况下实现通过改变倾斜开关状态重新开始计时。
三、实验过程
1、倾斜开关控制LED灯
(1)使用导线分别连接面包板的电源总线正极和负极到电路板的3V3和GND接口;放置1个倾斜开关在面包板上,其中负极(标注了“-”的针脚)连接到面包板电源总线负极,正极(中间针脚)连接到面包板电源总线正极,标注了S的针脚连接到电路板D8(GPIO15)接口;放置1个LED灯在面包板上,正极连接到电路板D0(GPIO16)接口,负极通过1个1K电阻连接到面包板电源总线负极。电路连接如图所示。
图12-2实验电路连接图
(2)在新建的Arduino程序窗口中输入如下代码:
void setup() {
pinMode(15,INPUT);//设置倾斜开关连接的端口为输入
pinMode(16,OUTPUT);//数值LED连接的端口为输出
}
void loop() {
int switchState=digitalRead(15);//读取倾斜开关的状态
if(switchState) { //当倾斜开关打开时,点亮LED
digitalWrite(16,HIGH);
}
else {
digitalWrite(16,LOW);
}
}
(3)将USB线缆插入计算机,待程序上传成功后观察LED灯的状态。
该实验的结果是:当接通电源时,LED灯点亮,当将面包板倾斜(使倾斜开关的倾斜角度超过17度)时,LED灯熄灭。
2、倾斜开关制作计时器
(1)将第1步实验中的LED及其电阻和导线拆除;放置4个LED灯在面包板上,负极各使用1个1K电阻连接到总线负极,正极分别使用导线连接到电路板的D3(GPIO0)、TX(GPIO1)、D4(GPIO2)及RX(GPIO3)接口,注意接口的顺序和灯的排列顺序需要一致,否则依次亮起的灯将不是按顺序的。电路连接如图所示。
图12-3实验电路连接图
(2)在新建的Arduino程序窗口中输入如下代码:
const int switchPin=15;//常量,保存倾斜开关连接端口
unsigned long previousTime=0;//定义长整型正数,初始值为0,用于保存毫秒时间
int switchState=0;//存储倾斜开关当前的状态
int prevSwitchState=0;//存储倾斜开关状态变化之前的状态
int led=0;//存储led灯的接口号
long interval=1000;//设置点亮灯的时间间隔
void setup() {
for(int i=0;i<4;i++){ //初始化led灯各接口为输出
pinMode(i,OUTPUT);
}
pinMode(switchPin,INPUT); //初始化倾斜开关接口为输入
}
void loop() {
unsigned long currentTime=millis();//记录自程序启动以来经过的毫秒时间
if(currentTime-previousTime>interval){//当经过的时间超过了设定的时间间隔
previousTime=currentTime; //将初始时间数设为当前经过的时间数
digitalWrite(led,HIGH);//点亮1个LED灯
led++;//通过led变量值的变化控制点亮哪个灯
}
if(led>=4){//当所有的灯都被点亮后
for(int i=0;i<4;i++){//依次熄灭所有灯
digitalWrite(i,LOW);
delay(80);
}
for(int i=0;i<4;i++){ //依次点亮所有灯,实现灯光闪烁的效果
digitalWrite(i,HIGH);
delay(80);
}
}
switchState=digitalRead(switchPin);//读取倾斜开关状态
if(switchState!=prevSwitchState){ //若倾斜开光状态发生改变
for(int i=0;i<4;i++){ //熄灭所有灯
digitalWrite(i,LOW);
}
led=0;//重置变量
previousTime=currentTime; //从当前时间值开始重新计时
}
//此句表示倾斜开关状态改变后立即重新计时,若注释该语句,则需要恢复倾斜开关为初始状态才会重新计时
prevSwitchState=switchState;
}
(3)将USB线缆插入计算机,待程序上传成功后观察LED灯的状态。
该实验的结果是:当接通电源1秒后,第1个LED灯亮起,1秒后第2个LED灯亮起,直到4个LED灯全部亮起后,所有灯交替持续闪烁,当将倾斜开关倾斜时,LED灯全部熄灭,并重新开始计时。