Arduino 入门教程GO 第二章 按钮控制LED的显示-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 664|回复: 0

Arduino 入门教程GO 第二章 按钮控制LED的显示

[复制链接]
发表于 2022-1-17 11:46 | 显示全部楼层 |阅读模式
本帖最后由 OpenJumper 于 2022-1-17 11:49 编辑

[md]## 一、按钮控制LED延时开关

在上一章中我们使用了Arduino语言编写了程序,通过程序完成了流水灯的设计与实验,在这一章中,我们将更加深入,通过程序,来达到手动控制LED灯的点亮熄灭,在按下按钮时,LED将被点亮,松开按钮时,LED将被熄灭,这样自己动手参与其中,也会更有兴趣吧。

## 二、实验器件

+ UNO 控制板:1块

+ LED灯:1个

+ 220Ω电阻:1个

+ 10KΩ电阻:1个

+ 面包板:1块

+ 面包板跳线:若干

+ 按钮:1个

## 三、连线示意图

01.jpg
图2-1


## 四、硬件连线图

02.jpg
图2-2


## 五、硬件知识要点

实验中我们将使用到的按钮开关为四脚按钮开关,其内部电路如图2-3所示:

03.jpg
图2-3


**限流电阻**

一般LED的最大能承受的电流为25mA,如若直接将LED连接到电路中,当其点亮时,如果电流过大,很容易烧毁。如图2-1所示,我们在LED正极串联了一个电阻R2,这样做可以控制流过LED的电流,防止损坏LED。这个电阻我们称之为限流电阻。

**下拉电阻**

在UNO的2号引脚到GND之前,连接了一个阻值10K的电阻。如果没有该电阻,当未按下按键时,2号引脚会一直处于悬空 状态,此时使用digitalRead() 读取2号引脚状态,会得到一个不稳定的值(可能是高,也可能是低)。添加这个R1电阻到地就是为了稳定引脚的电平,当引脚悬空时,就会识别为低电平。而这种将某节点通过电阻接地的做法,叫做下拉,这个电阻叫做下拉电阻。

当未按下按键时,2号引脚检测到的输入电压为低电平;当按下按键时,会导通2号引脚和VCC,此时2号引脚检测到的输入电压为高电平。通过判断按键是否被按下,来控制LED的亮灭。

## 六、程序编写

我们可以在Arduino IDE菜单>文件>示例>02.Digital>Button 中找到以下程序:[/md]

  1. // 设置各引脚别名
  2. const int buttonPin = 2;     // 连接按键的引脚
  3. const int ledPin =  13;      // 连接LED的引脚

  4. // 变量定义
  5. int buttonState = 0;         // 存储按键状态的变量

  6. void setup() {
  7.   // 初始化LED引脚为输出状态
  8.   pinMode(ledPin, OUTPUT);      
  9.   // 初始化按键引脚为输入状态
  10.   pinMode(buttonPin, INPUT);     
  11. }

  12. void loop(){
  13.   // 读取按键状态并存储在变量中
  14.   buttonState = digitalRead(buttonPin);

  15.   // 检查按键是否被按下
  16.   // 如果按键按下,那buttonState应该为高电平
  17.   if (buttonState == HIGH) {     
  18.     // 点亮LED
  19.     digitalWrite(ledPin, HIGH);  
  20.   }
  21.   else {
  22.     // 熄灭LED
  23.     digitalWrite(ledPin, LOW);
  24.   }
  25. }
复制代码


[md]
## 七、程序知识要点

const关键字代表常量。它是一个变量限定符,用于修改变量的性质,使其变为只读状态。这意味着该变量,就像任何相同类型的其他变量一样使用,但不能改变其值。

buttonState:按钮的状态。

## 八、拓展阅读

在上面的实验中,我们在按下按钮之后,LED会点亮,松开按键后,LED熄灭,接下来我们将对于程序和电路做一个小的修改,从而实现按下按钮后,LED点亮,再次按下按钮后,LED熄灭。具体电路图如图2-4所示:

04.jpg
图2-4


在上图2-4中,我们去掉了原来电路中2号引脚连接的下拉电阻,并将按键的一端连接到GND;同时,我们将原程序setup()中的程序,

pinMode(buttonPin,INPUT);
改为pinMode(buttonPin,INPUT_PULLUP);

这样能使能该引脚上的内部上拉电阻,等效于在该引脚到VCC之间连接一个外部上拉电阻。

**上拉电阻**
同下拉电阻一样,可以稳定I/O口电平,不同的是电阻连接到VCC,将引脚稳定在高电位。这种电阻叫做上拉电阻。
这里使用的是内部上拉电阻,也可以使用外部上拉电阻替代。稳定悬空引脚的电平所用电阻应该选择合适的阻值,例如10K。
修改之后的程序如下:
[/md]
  1. <div>int buttonPin = 2;
  2. int ledPin = 13;
  3. boolean ledState=false;  // 记录LED状态
  4. boolean buttonState=true;  // 记录按键状态

  5. void setup()
  6. {
  7. // 初始化I/O口
  8.   pinMode(buttonPin, INPUT_PULLUP);
  9.   pinMode(ledPin,OUTPUT);
  10. }

  11. void loop()
  12. {
  13. // 等待按键按下
  14. while(digitalRead(buttonPin)==HIGH){}

  15.   // 当按键按下时,点亮或熄灭LED
  16.   if(ledState==true)
  17.   {
  18.     digitalWrite(ledPin,LOW);
  19.     ledState=!ledState;
  20.   }
  21.   else
  22.   {
  23.     digitalWrite(ledPin,HIGH);
  24.     ledState=!ledState;
  25.   }
  26.   delay(500);
  27. }</div><div></div>
复制代码


[md]
这样我们就完成了对于程序的修改,使用上述程序,我们可以实现,每按一下按钮,都可以让LED的状态发生改变。

[/md]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-28 07:59 , Processed in 0.108868 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表