从面包板到 PCB:Simon Says 记忆游戏制作 – 第一部分
项目简介
经典 Simon Says 记忆游戏复刻:四色 LED 依次闪烁,玩家按对应按键复现序列,每轮序列长度 +1,直到失败或达到设定轮数获胜。本系列共三部分:① 面包板搭建与代码(本文);② Upverter 设计 PCB;③ CNC 铣削自制 PCB。
硬件清单
- Arduino UNO ×1
- 全尺寸面包板 ×1
- LED ×4(红、绿、黄、蓝各 1)
- 12mm 轻触开关 ×4 – 对应四色按键
- 无源蜂鸣器 ×1
- 10kΩ 电阻 ×4 – 按键下拉(代码启用内部上拉,外接电阻可选)
- 330Ω 电阻 ×4 – LED 限流
- USB 数据线 ×1
- 跳线若干
接线参考 (Fritzing 图见原文)
| 功能 | Arduino 引脚 | 备注 |
|---|---|---|
| 绿 LED | D12 | 通过 330Ω 接地 |
| 红 LED | D9 | 通过 330Ω 接地 |
| 黄 LED | D5 | 通过 330Ω 接地 |
| 蓝 LED | D2 | 通过 330Ω 接地 |
| 绿按键 | D13 | 内部上拉,按下接地 |
| 红按键 | D10 | 内部上拉 |
| 黄按键 | D6 | 内部上拉 |
| 蓝按键 | D3 | 内部上拉 |
| 蜂鸣器 | D8 | 另一脚接地 |
核心代码逻辑
状态机设计
gameState = 0:待机演示模式,四色 LED 轮流流水,任意键开始gameState = 1:游戏进行中 – 生成随机序列 → 显示提示 → 等待玩家输入 → 判定gameState = 2:胜利 – 播放胜利音效 + LED 跑马灯gameState = 3:失败 – 播放失败音效 + 全闪烁
关键函数
setLed(int):单点亮/全灭控制displayClue(round):按顺序闪烁当前轮次所有颜色waitForInput(expected):阻塞等待按键,亮对应 LED 反馈,超时/错键返回 falsewinDisplay() / loseDisplay():胜负动画winning_sound() / losing_sound():蜂鸣器播放简易乐谱
难度调节
修改宏 #define NUMBERTOWIN 5 即可改变胜利所需轮数(默认 5 轮,约 15 步序列)。
调试技巧
- 开启串口监视器(9600 波特),观察
gameValues[]生成的随机序列与玩家输入对比 - 按键消抖:代码中
delay(250)简单去抖,正式 PCB 可改用硬件 RC 或库函数 - 随机种子:
randomSeed(analogRead(0))利用悬空模拟口噪声产生种子
下一步计划
- 在 Upverter 中绘制原理图、布局 PCB(双层板,SMD 封装缩小体积)
- 增加电池供电、电源开关、扩展接口(如 I2C OLED 显示分数)
- CNC 铣削或订制打样,完成从面包板到成品的完整流程
制造工艺
- Arduino Nano 与 MPU-6050 构建实时陀螺仪游戏
- Arduino 数字骰子:LCD 显示随机点数的电子骰子
- 用 Arduino Nano 自制 37 灯珠轮盘赌游戏机
- DIY Arduino USB 游戏手柄 — 自制高性能游戏手柄
- Arduino + 模拟摇杆互动游戏:五向 LED 反馈
- 便携测距仪 DIY 套件:Arduino Nano + HC-SR04 + 18650 电池 + 3D 打印外壳
- Pixel Chaser:Arduino Nano 单键 NeoPixel 追逐小游戏
- 铜电镀智能系统:基于 Arduino UNO 的可控电解装置
- Arduino Nano 驱动 NeoPixel 矩阵:自制霓虹乒乓游戏
- 使用 Arduino 移位寄存器创建绚丽灯光序列
- 小型车间进军航空航天制造:实战指南
- 四层 PCB 制造全流程图解:17 步精细工艺详解