1. 所需硬件
– Arduino Uno控制器
– 5个LED
– 5个220 欧姆电阻
– 1个10k欧姆电阻
– 连接线
– 面包版
– 1个按钮
2.电路图

注意线路的连接,不要看漏或接错
3.代码
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 awnser = 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); // 短暂延迟防抖
awnser = random(5); // 生成随机答案(0-4)
switch (awnser) {
case 0: // no
digitalWrite(redLed, HIGH);
delay(1000);
break;
case 1: // rather not
digitalWrite(yellowLed, HIGH);
delay(1000);
break;
case 2: // maybe
digitalWrite(whiteLed, HIGH);
delay(1000);
break;
case 3: // rather yes
digitalWrite(blueLed, HIGH);
delay(1000);
break;
case 4: // yes
digitalWrite(greenLed, HIGH);
delay(1000);
break;
}
}
}
扩展(代码解释)
askButtonState = digitalRead(askButton); :这行代码的作用是读取按钮引脚的电平状态。 digitalRead() 是 Arduino 内置函数,用于获取指定数字引脚的电平( HIGH 表示高电平, LOW 表示低电平),并把这个状态值赋给变量 askButtonState ,这样程序就能知道按钮当前是被按下还是未被按下。
- if (askButtonState == HIGH) :这是一个条件判断语句。它的作用是判断按钮引脚的电平是否为高电平( HIGH )。通常在按钮电路中,如果按钮被按下,电路会发生变化,使得连接按钮的引脚电平变为高电平,当检测到这个高电平(即 askButtonState == HIGH 成立)时,就会执行 if 语句块里的代码,一般是触发相应的功能(比如之前代码里的随机点亮 LED 等操作)。
解释 random() 函数
random() 是 Arduino 内置的生成随机数的函数,有以下两种常用形式:
- random(max) :生成一个范围在 0 (包含)到 max (不包含)之间的随机整数。例如 random(5) ,会生成 0 、 1 、 2 、 3 、 4 中的一个随机数,这在之前的代码里用于随机选择点亮不同的 LED。
- random(min, max) :生成一个范围在 min (包含)到 max (不包含)之间的随机整数。比如 random(1, 10) ,会生成 1 到 9 之间的随机整数。
在使用 random() 函数前,通常会用 randomSeed(analogRead(0)) (如之前代码所示)来初始化随机数生成器, analogRead(0) 读取模拟引脚 A0 的随机电压值作为种子,这样可以让每次生成的随机数更具随机性,避免重复的随机序列。
成品
VID20251108162845
Arduino按钮控制随机LED
1085

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



