目录
2.1 实验题目
- 本次实验题目为:基于Arduino开发板的按键控制LED灯实验
2.2 实验目的
- 通过基于Arduino开发板的按键控制LED灯实验,学习如何使用Arduino读取外部输入(按键输入)并通过程序控制LED灯的状态。
2.3 实验原理
- 按键控制LED实验涉及读取数字输入引脚的状态,当按键按下时,Arduino将检测到引脚状态变化,从而改变LED的亮灭状态。
2.4 实验步骤
- 将按键连接到Arduino的数字引脚,LED通过电阻连接到另一数字引脚。
- 将按键连接到GND引脚,确保按键按下时与GND短接。
- 使用Arduino IDE编写程序,当按键按下时点亮LED,松开时熄灭LED。
- 上传程序到Arduino开发板。
- 观察LED的状态变化。
2.5 实验仪器
完成本次实验所需的元器件如表 2所示。
表 2 器材清单
元器件 | 数量 | 备注 |
Arduino开发板 | 1个 | / |
串口线 | 1条 | / |
按钮 | 1个 | / |
LED灯 | 1个 | / |
1KΩ电阻 | 1个 | / |
杜邦线 | 若干 | / |
2.6 电路设计
如图 2所示,为本次实验的电路设计图。
2.7 程序设计
以下是结合本次实验的电路设计图编写的实验程序,可以直接复制到Arduino单片机中进行烧录,烧录完成后即可实现本次实验要求达到的效果。
//引脚定义
const int buttonPin=2;//按键位置
const int ledPin=13;//led位置
//定义变量
int ledState=HIGH;//当前led状态
int buttonState;//读取的当前按键状态
int lastButtonState=LOW;//上次读取的按键状态
//使用长整型变量
long lastDebounceTime=0;//上次按键触发时间
long debounceDelay=50;//去抖时间,根据实际情况调整
void setup(){
pinMode(buttonPin,INPUT);
pinMode(ledPin,OUTPUT);
//初始化led的状态
digitalWrite(ledPin,ledState);
}
void loop(){
//读取按键状态赋值到一个变量
int reading=digitalRead(buttonPin);//如果按键状态变化,不过是由于抖动还是按键按下造成的,下面的程序都需要进行这一步处理
if(reading!=lastButtonState){
//复位去抖时间,就是把当前时间保存下来
lastDebounceTime=millis();
}
if((millis()-lastDebounceTime)>debounceDelay){
//等过了去抖时间,再次去检测按键的状态
if(reading!=buttonState){
buttonState=reading;
if(buttonState==HIGH){
ledState=!ledState;
}
}
}
//把led的最终结果输出到对应的引脚
digitalWrite(ledPin,ledState);
//保存当前值,一边下一个循环检测的时候使用
lastButtonState=reading;
}
2.8 实验总结
按下按键时,LED点亮;释放按键时,LED熄灭。实验成功,证明按键可以通过Arduino控制LED的亮灭状态。
通过这个实验,我学到了如何使用Arduino读取数字输入引脚的状态,并根据读取到的状态控制LED的亮灭。在实验中,我遇到了一些问题,例如电路连接错误或按键状态读取不准确,但通过仔细检查和调试,我成功解决了这些问题。这个实验为我理解Arduino数字输入输出和基本控制流程提供了实际经验。