实验十二 倾斜开关应用

实验十二 倾斜开关应用


一、实验目的

通过本实验,熟悉倾斜开关的工作原理、应用场景及安装使用过程,掌握在Arduino项目中通过倾斜开关控制LED的方法,并能使用倾斜开关制作1个简易计时器。


二、实验要求

 1、使用ESP 8266电路板、倾斜开关(如图所示)、LED、电阻和导线搭建实验电路,并编写相应Arduino程序代码,实现通过倾斜开关控制LED点亮和熄灭的效果。

12-1倾斜开关

 2、在第1步实验中再添加3LED灯及相应的电阻和导线,修改实验代码,通过定时依次点亮LED灯的方式进行模拟计时,全部LED点亮后闪烁所有LED灯表示计时结束,在任何情况下实现通过改变倾斜开关状态重新开始计时。


三、实验过程

 1、倾斜开关控制LED

1)使用导线分别连接面包板的电源总线正极和负极到电路板的3V3GND接口;放置1个倾斜开关在面包板上,其中负极(标注了“-”的针脚)连接到面包板电源总线负极,正极(中间针脚)连接到面包板电源总线正极,标注了S的针脚连接到电路板D8GPIO15)接口;放置1LED灯在面包板上,正极连接到电路板D0GPIO16)接口,负极通过11K电阻连接到面包板电源总线负极。电路连接如图所示。

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及其电阻和导线拆除;放置4LED灯在面包板上,负极各使用11K电阻连接到总线负极,正极分别使用导线连接到电路板的D3GPIO0)、TXGPIO1)、D4GPIO2)及RXGPIO3)接口,注意接口的顺序和灯的排列顺序需要一致,否则依次亮起的灯将不是按顺序的。电路连接如图所示。

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);//点亮1LED

    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秒后,第1LED灯亮起,1秒后第2LED灯亮起,直到4LED灯全部亮起后,所有灯交替持续闪烁,当将倾斜开关倾斜时,LED灯全部熄灭,并重新开始计时。