Arduino UNO 打造 LED 打地鼠游戏:摇杆交互的趣味电子项目
组件与物料清单
| 组件 | 数量 |
|---|---|
| Arduino UNO | 1 |
| LED(红、绿、黄等) | 7 |
| 220Ω 电阻 | 7 |
| 模拟摇杆模块 | 1 |
| 公对公跳线 | 8 |
| 公对母跳线 | 4 |
项目简介
这是我的第一个 Arduino 项目,基于早期学习的 LED 控制与基础语法完成。游戏规则模仿经典“打地鼠”:
- 7 个 LED 排成一行,第 2~5 个(共 4 个)代表“地鼠”出洞位置,分别对应摇杆的左、上、下、右四个方向(排列顺序可自定义)。
- 最左侧红、绿双色 LED 指示判定结果:绿亮=命中,红亮=失误。
- 最右侧黄色 LED 用于显示最高分:每次游戏结束(出现失误)以闪烁次数表示历史最高连续命中数。
- 难度通过常量定义反应时间:简单 1000ms、中等 500ms、困难 325ms、疯狂 250ms,可自行调整。

摇杆信号处理
模拟摇杆 X/Y 轴输出 0~1023(实测最大值为 1023),通过 switch-case 将极值映射为 4 个离散方向:
- X=0 → 左(方向值 1)
- X=1023 → 右(方向值 2)
- Y=0 → 上(方向值 3)
- Y=1023 → 下(方向值 4)
中间区域数值被忽略,仅识别四个极限方向,逻辑简单直观。
完整代码
// Whack-a-LED (打地鼠游戏)
// 摇杆引脚
int sX = A0; // X 轴
int sY = A1; // Y 轴
int sSX, sSY, sS; // 读取值与转换后方向
// 游戏状态
int rNum; // 随机亮起的地鼠编号 0~3
int wins = 0; // 当前连续命中数
int highScore = 0; // 历史最高分
// 难度常量(反应时间 ms)
const int easy = 1000;
const int medium = 500;
const int hard = 325;
const int stupid = 250; // 当前使用最难
// LED 引脚数组:[红, 绿, 地鼠1, 地鼠2, 地鼠3, 地鼠4, 黄]
int ledPins[] = {5, 2, 4, 3, 6, 7, 8};
int pinCount = 7;
void setup() {
Serial.begin(9600);
pinMode(sX, INPUT);
pinMode(sY, INPUT);
for (int i = 0; i < pinCount; i++) pinMode(ledPins[i], OUTPUT);
}
void loop() {
rNum = random(4); // 0~3 对应 4 个地鼠 LED
delay(1000); // 间隔 1 秒出现下一个
digitalWrite(ledPins[rNum + 1], HIGH); // 地鼠 LED 索引偏移 1
delay(stupid); // 反应时间窗口
// 读取摇杆
sSX = analogRead(sX);
delay(100);
sSY = analogRead(sY);
// 映射方向
sS = 0;
switch (sSX) {
case 0: sS = 1; break; // 左
case 1023: sS = 2; break; // 右
}
switch (sSY) {
case 0: sS = 3; break; // 上
case 1023: sS = 4; break; // 下
}
digitalWrite(ledPins[rNum + 1], LOW); // 熄灭地鼠
// 判定
if (sS - 1 == rNum) { // 命中
wins++;
for (int k = 0; k <= 3; k++) { // 绿灯闪烁 4 次
digitalWrite(ledPins[1], HIGH); delay(50);
digitalWrite(ledPins[1], LOW); delay(50);
}
} else { // 失误
if (wins > highScore) highScore = wins;
wins = 0;
for (int i = 0; i <= 3; i++) { // 红灯闪烁 4 次
digitalWrite(ledPins[0], HIGH); delay(50);
digitalWrite(ledPins[0], LOW); delay(50);
}
// 黄灯闪烁显示最高分
for (int w = 0; w < highScore; w++) {
digitalWrite(ledPins[6], HIGH); delay(200);
digitalWrite(ledPins[6], LOW); delay(200);
}
}
}
原理图
摇杆 5 引脚中使用 4 个:GND、+5V、VRx(A0)、VRy(A1)。LED 与电阻串联后接对应数字引脚,原理图与实物接线一致。


欢迎提出改进建议,例如增加难度选择菜单、声音提示、LCD 显示分数等!
制造工艺