引言
欢迎来到你的第一个Arduino输入项目!在本教程中,你将搭建一个由按钮控制LED的电路。按下按钮时LED亮起,松开时LED熄灭。这个简单的项目将带你学习读取数字输入、使用内部上拉电阻以及编写简洁的Arduino代码。
我们将使用Velxio在线模拟器,它提供了SPICE精确的环境,让你无需硬件即可测试电路。让我们开始吧!
电路详解

该电路由三个主要组件组成:
- Arduino Uno – 整个电路的控制核心。
- 按钮 – 一种瞬时开关,按下时连接两个引脚。
- 红色LED – 输出设备。
接线细节
-
按钮与Arduino的连接:
- 按钮的一个引脚(
1.l)通过蓝色导线(#00aaff)连接到Arduino的数字引脚2。 - 另一个引脚(
2.l)通过黑色导线连接到GND。
- 按钮的一个引脚(
-
LED与Arduino的连接:
- 阳极(长引脚,
A)通过红色导线(#ff0000)连接到Arduino的数字引脚13。 - 阴极(短引脚,
C)通过黑色导线连接到GND。
- 阳极(长引脚,
请注意,按钮没有外部上拉电阻。相反,我们将在代码中使用Arduino的内部上拉电阻。当按钮未按下时,输入引脚被拉高为HIGH;按下时,读取为LOW。
代码详解

以下是完整的Arduino代码:
// 按钮控制LED
// 按下按钮点亮LED
const int BUTTON_PIN = 2;
const int LED_PIN = 13;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
int buttonState = digitalRead(BUTTON_PIN);
if (buttonState == LOW) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
}
代码说明
- 常量定义:
BUTTON_PIN设为2,LED_PIN设为13。使用常量使代码更易读且便于修改。 setup()函数:pinMode(BUTTON_PIN, INPUT_PULLUP)将引脚2配置为输入并启用内部上拉电阻。这意味着引脚默认读取为HIGH,当按钮按下(连接到GND)时读取为LOW。pinMode(LED_PIN, OUTPUT)将引脚13设置为输出以驱动LED。
loop()函数:digitalRead(BUTTON_PIN)读取按钮状态。如果为LOW(按钮按下),则通过digitalWrite(LED_PIN, HIGH)点亮LED。否则,熄灭LED。
关键概念
数字输入与上拉电阻
当数字引脚配置为输入时,它读取HIGH(5V)或LOW(0V)。如果没有上拉或下拉电阻,引脚会处于浮动状态,导致读数不稳定。内部上拉电阻(通常为20k-50k欧姆)确保按钮断开时引脚稳定为HIGH。按下按钮将引脚直接连接到GND,覆盖上拉电阻,从而读取为LOW。
去抖动
机械按钮通常会产生抖动,导致多次快速的状态变化。在这个简单示例中,我们忽略了去抖动,因为LED响应迅速且影响很小。对于更关键的应用,可以添加短暂延迟或使用去抖动库。
使用常量
在代码顶部将引脚号定义为常量,可以轻松更改接线而无需在代码中查找。同时提高了代码的可读性。
常见问题与调试技巧
- 按钮接线:确保一个引脚连接到Arduino引脚,另一个连接到GND。如果两个引脚连接到同一行,按钮将无法工作。
- LED极性:阳极(长引脚)必须连接到数字引脚,阴极(短引脚)连接到GND。反接不会损坏LED,但不会点亮。
- 未启用上拉电阻:如果忘记使用
INPUT_PULLUP而使用普通的INPUT,引脚将处于浮动状态,LED可能会随机闪烁。 - 引脚号错误:仔细检查代码是否与接线一致。本例中,按钮接引脚2,LED接引脚13。
使用Velxio模拟器

点击工具栏中的运行按钮,编译并启动仿真。然后点击画布上的按钮,观察LED的响应。

使用画布工具栏暂停、重置或调整仿真速度。

要添加更多组件,打开组件选择器并浏览”输入”或”输出”等类别。

如果需要额外的库(例如用于去抖动),请使用库管理器。
扩展建议
在基本电路正常工作后,尝试以下改进:
- 切换模式:修改代码,使每次按下按钮切换LED的亮灭状态,而非按住才亮。
- 多个LED:添加更多LED和按钮,创建一个简单的输入面板。
- 去抖动:使用50ms延迟或定时器实现软件去抖动。
- 串口监视器:将按钮状态打印到串口监视器以进行调试。
- PWM亮度控制:用
analogWrite()替代数字写入,根据按钮按下时长控制LED亮度。