亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

制作 Arduino 记忆游戏

组件和用品

Arduino UNO
× 1
SparkFun 330 欧姆电阻
我们只需要 4 个
× 1
SparkFun 10k 欧姆电阻
我们只需要 4 个
× 1
SparkFun 各种 LED
我们需要 4 个不同颜色的 LED
× 1
SparkFun 迷你音箱
如果你不关心声音,你可以不用这个
× 1
SparkFun 面包板(全尺寸)
× 1
跳线(通用)
× 1

应用和在线服务

Arduino IDE

关于这个项目

你还记得游戏“西蒙”吗?很多和我同龄的人(出生在 70 年代)不得不浪费很多时间来玩它。游戏很简单,它有 4 个不同颜色的按钮,它们会依次亮起,你必须重复这个顺序。每一次,你都做对了,游戏会在最后给你一个额外的颜色的序列。

很久以前我为圣诞节买了一个,但后来我搬家搬家,搬家又搬家,所以游戏迷失在许多盒子中的一个盒子里,这些盒子从一个移动到另一个永远不会被拆开......

作为一个“成年人”,我发现了 Arduino 的乐趣,并借此机会重振了我失散已久的朋友。

本教程将向您展示如何使用 Arduino Uno、几个 LED 和电阻器以及一个相对简单的电路来制作类似的游戏。

对于初学者来说,程序本身可能有点复杂,所以我试图在代码中解释它的作用和方式。

运行此游戏的最简单方法是这样。

1) 严格按照图中所示连接电路。电线的颜色无关紧要,因此如果您用完黑色电线,那没关系。 :)

2) 将源代码粘贴到您喜欢的 Arduino 编辑器中并上传到开发板

3) 玩游戏

游戏在大约 3 秒后开始,所有 LED 灯闪烁 5 次。

如果一个或多个 LED 不闪烁,请检查接线。在我的板上,非常小的按钮并不总是正确放置,并且有弹出的倾向。

如果接线看起来正确,请尝试将正常工作的 LED 与不工作的 LED 倒置,看看是接线还是 LED 本身。

5 次闪烁完成后,一个 LED 将亮起。我不能告诉你哪个,这是一个惊喜:) 按下那个 LED 的按钮。该 LED 将再次亮起,然后是一个新的。按顺序按下正确的按钮......你看我要做什么......

然后,很快,您就会看到它们都快速闪烁。那就是你输了。 :D

将播放给您的最后一个序列,以便您可以计算您的分数,然后是之前的 5 次缓慢闪烁,表明游戏又开始了。

您有 2 秒钟的时间按下每个按钮。

你去吧!玩得开心!

想让它更难一点吗?为什么不将代码中的第一行更改为不同的值?

#define PLAYER_WAIT_TIME 2000  

或者你可以添加另一个 LED,如果你有一个......为此,你首先需要重现电路的这一部分:

这里的橙色线将连接到 Arduino 上任何未使用的引脚(尽管避免 0 和 1)

然后修改代码中的以下几行:

byte noPins =4byte pin[] ={2, 13, 10, 8};  

如果你在第 6 针上加了一个 LED,代码就会变成

byte noPins =5byte pin[] ={2, 13, 10, 8, 6};  

编写 Arduino 代码的小技巧:

void setup() { delay(3000); Serial.begin(9600);重启(); }  

将短暂延迟作为 setup() 函数的第一条语句。很容易让 Arduino 进入无限循环或以某种方式锁定它。如果发生这种情况,那么短暂的延迟允许您重置 Arduino 并在它再次锁定之前上传空白草图。 .

我最终接受了这个小想法并使其便携......

如果您想为类似(但更高级)的游戏看到一个非常酷的想法。检查这个 https://www.instructables.com/id/Lego-Mini-Memory-Game by Peter Kent。他在手机上制作了这款游戏,并带有乐高汽车的界面。真是太棒了!

代码

  • 记忆游戏代码
记忆游戏代码Arduino
这是游戏的完整代码。只需将其复制并粘贴到您最喜欢的 IDE 中,然后将其上传到 Arduino。
#define PLAYER_WAIT_TIME 2000 // 按钮按下之间允许的时间 - 2s 字节序列 [100]; // 存储光序列字节 curLen =0; // 当前序列字节的长度 inputCount =0; // 在给定的回合字节中玩家按下(正确)按钮的次数 lastInput =0; // 来自玩家字节的最后输入 expRd =0; // 假定由 playerbool 点亮的 LED btnDwn =false; // 用于检查按钮是否被按下bool wait =false; // 程序是否在等待用户按下按钮bool resetFlag =false; // 用于向程序表明一旦播放器丢失字节 soundPin =5; // 扬声器输出字节 noPins =4; // 按钮/LED 的数量(在处理这个问题时,我只使用了 2 个 LED)// 您可以通过添加额外的 LED/按钮/电阻器组合来使游戏更难。字节 pin[] ={2, 13, 10 , 8}; // 按钮输入引脚和 LED 输出引脚 - 如果您想将按钮连接到其他引脚,请更改这些值 // 元素数量必须与 long inputTime =0 以下的 noPins 匹配; // 用户输入之间延迟的定时器变量void setup() { delay(3000); // 这是为了让我在连接 arduino 后有时间喘口气 - 如果你想要 Serial.begin(9600); 可以删除; // 启动串行监视器。这也可以删除,只要您删除 Reset() 下对 Serial 的所有引用;}////// 根据 'dir' 的值将所有引脚设置为 INPUT 或 OUTPUT ////void setPinDirection(byte dir){ for(byte i =0; i  快 |大数字 -> 慢//无效闪光(短频率){ setPinDirection(输出); /// 我们现在正在激活 LED for(int i =0; i <5; i++){ writeAllPins(HIGH);哔(50);延迟(频率); writeAllPins(低);延迟(频率); }}//////此函数将所有游戏变量重置为其默认值////void Reset(){ flash(500); CurLen =0;输入计数 =0;最后输入 =0; expRd =0; btnDwn =假;等待=假; resetFlag =false;}////// 用户丢失///void Lose(){ flash(50); }////// arduino 向用户显示必须记住的内容/// 丢失后也调用以显示您上次的序列是什么////void playSequence(){ //循环遍历存储的序列并点亮适当的LED依次为(int i =0; i  PLAYER_WAIT_TIME){ // 如果玩家花费的时间超过允许的时间,DoLoseProcess(); // 一切都丢失了 :( return; } if(!btnDwn){ // expRd =sequence[inputCount]; // 找到我们期望从玩家那里得到的值 Serial.print("Expected:"); // 串行监视器输出- 如果删除上面的 Serial.begin 应该删除 Serial.println(expRd); // 串行监视器输出 - 如果删除上面的 Serial.begin for(int i =0; i  

示意图

simonsays_siKds3Jmk2.fzz

制造工艺

  1. 使用 Arduino 制作流光溢彩监视器
  2. Arduino Gyroscope Game with MPU-6050
  3. NeoPixel Ring 的陀螺仪乐趣
  4. Arduino Pong Game - OLED 显示器
  5. Arduino 游戏控制器
  6. Arduino Touch Breakout 游戏
  7. Pixie:基于 Arduino 的 NeoPixel 手表
  8. 像素追逐游戏
  9. 使用 arduino 的自动化恐龙游戏
  10. 移动远程监控摄像头
  11. 智能手套
  12. 如何用 Arduino 制作音乐