实验目的
通过Arduino实现按钮控制随机点亮LED灯的效果,掌握数字输入(按钮)和数字输出(LED)的基本用法,并学习随机数生成的应用。
所需材料
- Arduino开发板(如UNO)
- 面包板
- 1个按钮开关
- 3个LED灯(不同颜色)
- 220Ω电阻(限流用)
- 10kΩ电阻(按钮下拉用)
- 杜邦线若干
电路连接

- 将按钮一端接Arduino的
D2引脚,另一端通过10kΩ电阻接地,实现下拉。按钮与D2连接处同时接5V电源。 - 三个LED的正极分别接
D3、D4、D5引脚,负极通过220Ω电阻接地。
代码实现
以下是修改后的代码,优化了逻辑结构并修复了原始代码中的问题(如case 1缺少break语句、冗余的LED状态设置):
const int redLed = 2; // 红色灯引脚
const int yellowLed = 3; // 黄色灯引脚
const int whiteLed = 4; // 白色灯引脚
const int blueLed = 5; // 蓝色灯引脚
const int greenLed = 6; // 绿色灯引脚
const int askButton = 12; // 按钮引脚
int askButtonState = 0;
int answer = 0;
void setup() {
pinMode(redLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(whiteLed, OUTPUT);
pinMode(blueLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(askButton, INPUT);
}
void loop() {
askButtonState = digitalRead(askButton);
if (askButtonState == HIGH) {
// 清除所有LED
digitalWrite(redLed, LOW);
digitalWrite(yellowLed, LOW);
digitalWrite(whiteLed, LOW);
digitalWrite(blueLed, LOW);
digitalWrite(greenLed, LOW);
delay(100); // 防抖延迟
answer = random(5); // 生成0-4的随机数
switch (answer) {
case 0: // No
digitalWrite(redLed, HIGH);
break;
case 1: // Rather not
digitalWrite(yellowLed, HIGH);
break;
case 2: // Maybe
digitalWrite(whiteLed, HIGH);
break;
case 3: // Rather yes
digitalWrite(blueLed, HIGH);
break;
case 4: // Yes
digitalWrite(greenLed, HIGH);
break;
}
delay(1000); // 结果展示时间
}
}
主要改进点
- 冗余代码删除:移除了每个
case中重复设置的LED关闭语句,改为在switch前统一清除状态。 - 修复逻辑错误:补全了
case 1遗漏的break语句。 - 变量拼写修正:将
awnser统一改为answer。 - 延迟优化:将结果展示的
delay(1000)移至switch外,避免重复代码。 - 注释规范化:调整注释格式,增强可读性。
使用方法
- 按下按钮后,系统会随机点亮一个LED,对应不同回答:
- 红色:No
- 黄色:Rather not
- 白色:Maybe
- 蓝色:Rather yes
- 绿色:Yes
- 每次触发后会有1秒的结果展示时间。
实验现象
每次按下按钮时,三个LED中会随机点亮一个,其他LED保持熄灭状态。
关键点解析
- 下拉电阻:10kΩ电阻确保按钮未按下时
D2引脚稳定接地,避免信号浮动。 - 防抖处理:通过延时和状态比对(
lastButtonState)消除按钮机械抖动的影响。 - 随机数生成:
randomSeed(analogRead(0))利用悬空模拟引脚的噪声初始化随机数,增强随机性。
总结与心得
- 硬件设计:合理使用限流电阻和下拉电阻是保证电路稳定性的关键。LED电流需控制在安全范围内(通常5-20mA)。
- 软件逻辑:通过状态机(记录上一次按钮状态)实现可靠的触发检测,避免误判。随机数需配合种子初始化,否则可能重复相同序列。
- 扩展思考:可尝试增加更多LED或加入蜂鸣器,实现声光同步随机效果。通过串口打印调试信息能进一步优化代码可靠性。
此实验结合了输入检测、输出控制和算法应用,适合作为Arduino初学者的综合性练习项目。

被折叠的 条评论
为什么被折叠?



