2. 交通信号灯模拟

任务说明

使用Arduino开发板控制红、黄、绿三个LED,模拟交通信号灯的红绿灯切换逻辑。信号灯按照“红灯亮5秒→绿灯亮4秒→黄灯亮1秒→红灯亮”的顺序循环运行,通过数字引脚输出高低电平控制LED的亮灭状态。

硬件连接

  • 红色LED正极(长脚)→ Arduino数字引脚D2,负极串联220Ω电阻后接GND
  • 黄色LED正极(长脚)→ Arduino数字引脚D3,负极串联220Ω电阻后接GND
  • 绿色LED正极(长脚)→ Arduino数字引脚D4,负极串联220Ω电阻后接GND
Arduino Uno D2 D3 D4 D2 D3 D4 GND 220Ω 220Ω 220Ω LED 红 LED 黄 LED 绿 面包板(示意)

完整代码

// 引脚定义
const int RED_PIN = 2;    // 红色LED接D2
const int YELLOW_PIN = 3; // 黄色LED接D3
const int GREEN_PIN = 4;  // 绿色LED接D4

// 持续时间(毫秒)
const int RED_DURATION = 5000;    // 红灯5秒
const int GREEN_DURATION = 4000;  // 绿灯4秒
const int YELLOW_DURATION = 1000; // 黄灯1秒

void setup() {
  pinMode(RED_PIN, OUTPUT);
  pinMode(YELLOW_PIN, OUTPUT);
  pinMode(GREEN_PIN, OUTPUT);
  // 初始状态:所有灯熄灭
  digitalWrite(RED_PIN, LOW);
  digitalWrite(YELLOW_PIN, LOW);
  digitalWrite(GREEN_PIN, LOW);
}

void loop() {
  // 红灯亮
  digitalWrite(RED_PIN, HIGH);
  digitalWrite(YELLOW_PIN, LOW);
  digitalWrite(GREEN_PIN, LOW);
  delay(RED_DURATION);

  // 绿灯亮
  digitalWrite(RED_PIN, LOW);
  digitalWrite(YELLOW_PIN, LOW);
  digitalWrite(GREEN_PIN, HIGH);
  delay(GREEN_DURATION);

  // 黄灯亮
  digitalWrite(RED_PIN, LOW);
  digitalWrite(YELLOW_PIN, HIGH);
  digitalWrite(GREEN_PIN, LOW);
  delay(YELLOW_DURATION);
}

运行与验证

  1. 按上述引脚定义完成硬件接线,将代码上传至Arduino开发板。
  2. 观察三个LED的亮灭顺序:红灯亮5秒→绿灯亮4秒→黄灯亮1秒→红灯亮,如此循环。
  3. 判定标准:任意时刻只有一个LED点亮,且红灯、绿灯、黄灯的持续亮灯时间分别约为5秒、4秒、1秒,循环无中断。

预期输出时序:红灯亮(0~5s)→ 绿灯亮(5~9s)→ 黄灯亮(9~10s)→ 红灯亮(10~15s)→ 绿灯亮(15~19s)→ 黄灯亮(19~20s)→ ……