目录

·所需硬件

·拓展

·利用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无动作。
random()函数
- 功能:生成伪随机整数,随机选择点亮的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数组即可

更多推荐