arduino led灯随机点亮实验
·
目录
·利用deepseek定义一个函数并优化led灯随机点亮代码
·所需硬件
– Arduino Uno控制器
– 5个LED
– 5个220 欧姆电阻
– 1个10k欧姆电阻
– 连接线
– 面包版
– 1个按钮
连线图
实物图
连接好电路后将板子连接到我们的电脑,来到arduino-ide写入代码
代码部分
const int redLed = 2;
const int yellowLed = 3;
const int whiteLed = 4;
const int blueLed = 5;
const int greenLed = 6;
const int askButton = 12;
// initialize Variables
int askButtonState = 0;
int awnser = 0;
void setup() {
// put your setup code here, to run once:
pinMode(redLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(whiteLed, OUTPUT);
pinMode(blueLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(askButton, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
askButtonState = digitalRead(askButton);
if (askButtonState == HIGH) {
digitalWrite(redLed, LOW); // clear Leds to
show new awnser
digitalWrite(yellowLed, LOW);
digitalWrite(whiteLed, LOW);
digitalWrite(blueLed, LOW);
digitalWrite(greenLed, LOW);
delay(100);
awnser = random(5);
switch (awnser) {
case 0: // no
digitalWrite(greenLed, LOW);
digitalWrite(yellowLed, LOW);
digitalWrite(whiteLed, LOW);
digitalWrite(blueLed, LOW);
digitalWrite(redLed, HIGH);
delay(1000);
break;
case 1: // rather not
digitalWrite(redLed, LOW);
digitalWrite(whiteLed, LOW);
digitalWrite(blueLed, LOW);
digitalWrite(greenLed, LOW);
digitalWrite(yellowLed, HIGH);
delay(1000);
break;
case 2: // maybe
digitalWrite(redLed, LOW);
digitalWrite(yellowLed, LOW);
digitalWrite(blueLed, LOW);
digitalWrite(greenLed, LOW);
digitalWrite(whiteLed, HIGH);
delay(1000);
break;
case 3: // rather yes
digitalWrite(redLed, LOW);
digitalWrite(whiteLed, LOW);
digitalWrite(yellowLed, LOW);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, HIGH);
delay(1000);
break;
case 4: // yes
digitalWrite(redLed, LOW);
digitalWrite(whiteLed, LOW);
digitalWrite(blueLed, LOW);
digitalWrite(yellowLed, LOW);
digitalWrite(greenLed, HIGH);
delay(1000);
break;
}
}
}
接下来按下开关将会得到

·拓展
askButtonState = digitalRead(askButton);
if (askButtonState == HIGH)
的作用。
核心作用解析
1. askButtonState = digitalRead(askButton);
读取引脚12(askButton)的电平状态,将结果存入变量 askButtonState 。
- 若按钮按下,通常读取为 HIGH (高电平);未按下则为 LOW (低电平)。
2. if (askButtonState == HIGH)
判断按钮是否被按下:
- 当条件成立(按钮按下,状态为 HIGH ),执行大括号内的代码(熄灭所有LED,随机点亮一个对应颜色的LED)。
- 条件不成立时,不执行后续LED控制逻辑,等待下一次按钮操作。
通俗理解
这两行代码实现了「按钮触发功能」:按下按钮(引脚12变高电平),才会启动LED随机点亮的流程;不按按钮则程序循环等待,LED无动作。
1. askButtonState = digitalRead(askButton);
读取引脚12(askButton)的电平状态,将结果存入变量 askButtonState 。
- 若按钮按下,通常读取为 HIGH (高电平);未按下则为 LOW (低电平)。
2. if (askButtonState == HIGH)
判断按钮是否被按下:
- 当条件成立(按钮按下,状态为 HIGH ),执行大括号内的代码(熄灭所有LED,随机点亮一个对应颜色的LED)。
- 条件不成立时,不执行后续LED控制逻辑,等待下一次按钮操作。
通俗理解
这两行代码实现了「按钮触发功能」:按下按钮(引脚12变高电平),才会启动LED随机点亮的流程;不按按钮则程序循环等待,LED无动作。
random()函数
- 功能:生成伪随机整数,随机选择点亮的LED引脚。
- 语法: random(max) → 生成0~max-1的数(实验中 max=ledCount ,对应LED数组索引)。
- 关键:用 randomSeed(analogRead(A0)) 初始化种子,避免每次上电随机序列相同。
- 示例: random(4) 生成0~3的数,对应4个LED的引脚索引,实现随机点亮。
- 语法: random(max) → 生成0~max-1的数(实验中 max=ledCount ,对应LED数组索引)。
- 关键:用 randomSeed(analogRead(A0)) 初始化种子,避免每次上电随机序列相同。
- 示例: random(4) 生成0~3的数,对应4个LED的引脚索引,实现随机点亮。
·利用deepseek定义一个函数并优化led灯随机点亮代码
创建了一个lightRandomLED()函数来简化代码并提高可读性
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;
// 创建LED引脚数组,便于管理
int ledPins[] = {redLed, yellowLed, whiteLed, blueLed, greenLed};
int ledCount = 5;
void setup() {
// 设置所有LED引脚为输出模式
for (int i = 0; i < ledCount; i++) {
pinMode(ledPins[i], OUTPUT);
}
pinMode(askButton, INPUT);
}
void loop() {
askButtonState = digitalRead(askButton);
if (askButtonState == HIGH) {
// 清除所有LED
clearAllLEDs();
delay(100);
// 随机点亮一个LED
lightRandomLED();
delay(1000);
}
}
// 自定义函数:清除所有LED
void clearAllLEDs() {
for (int i = 0; i < ledCount; i++) {
digitalWrite(ledPins[i], LOW);
}
}
// 自定义函数:随机点亮一个LED
void lightRandomLED() {
awnser = random(ledCount); // 生成0到4的随机数
// 根据随机数点亮对应的LED
for (int i = 0; i < ledCount; i++) {
if (i == awnser) {
digitalWrite(ledPins[i], HIGH);
} else {
digitalWrite(ledPins[i], LOW);
}
}
}
优化说明:
1. 创建LED引脚数组:将所有LED引脚存储在数组中,便于统一管理
2. 添加clearAllLEDs()函数:用于快速关闭所有LED
3. 添加lightRandomLED()函数:处理随机选择并点亮LED的逻辑
4. 简化代码结构:使用循环替代重复的digitalWrite语句
5. 提高可维护性:如果需要添加更多LED,只需修改ledPins数组即可
更多推荐
所有评论(0)