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

面包板到 PCB 第 1 部分 - 制作西蒙说游戏

组件和用品

Arduino UNO
× 1
无焊面包板全尺寸
× 1
LED(通用)
× 4
SparkFun 按钮开关 12mm
× 4
蜂鸣器
× 1
跳线(通用)
× 12
电阻 10k ohm
× 4
电阻 330 ohm
× 4
USB-A 转 B 线
× 1

应用和在线服务

Arduino IDE

关于这个项目

简介

我们都看过旧的 Simon Says 游戏,您尝试通过按下与正确灯光序列相对应的按钮来复制灯光序列。对于 Hackster Live,我们展示了一款名为 Upverter 的 PCB 设计工具。这是一个有趣且简单的项目,可以创建并变成 PCB。下面是一个基本的项目,展示了游戏的创建,包括硬件和代码。

该项目系列分为三个部分。

  • 第 1 部分: 制作西蒙说游戏
  • 第 2 部分: 使用 Upverter 根据 Simon Says 游戏设计 PCB
  • 第 3 部分: 根据您在 Upverter 上创建的设计铣削您自己的 PCB

您将在本系列中学到什么

  • 如何在面包板上布置基本项目
  • 如何在 Upverter 中布置 PCB
  • 如何使用数控机床铣削自己的 PCB

软件

如果您没有用于编写代码并将其上传到 Arduino 的 Arduino IDE,请在此处下载适用于您的操作系统的最新版本。

硬件设置

我使用 Sparkfun 的 Inventor's Kit 示例作为硬件设置的灵感,并对其进行了轻微调整。查看下面的弗里茨图。

代码

这个游戏的有趣之处在于你可以有很多变化。正如我上面提到的,我使用 Sparkfun 的示例作为硬件设置的起点,并从头开始编写代码。如果编写自己的代码不是您感兴趣的东西,您可以在下面使用我的代码,在上面提到的示例中使用 Sparkfun 的代码并进行一些调整,或者搜索其他 Simon 所说的适合您的硬件设置的游戏/代码.

我在我的代码中包含了详细的注释和调试串行打印行,以便您可以在游戏运行时看到串行监视器上发生的事情。查看下面的 Simon Says 游戏视频!

西蒙说游戏视频

*注意:在此视频中,我将赢得比赛所需的连续灯数设置为 5。可以更改此设置以使游戏更难,但我希望视频相对较短 :)。

现在您已准备好将面包板变成 PCB!在面包板到 PCB 第 2 部分 - 使用 Upverter 设计 PCB 中了解如何操作。

代码

  • 西蒙说 Arduino 代码
西蒙说 Arduino 代码Arduino
 int ledArray[] ={12, 9, 5, 2};// ledArray[0] 为绿色,ledArray[1] 为红色,ledArray[2] 为黄色,ledArray[3] 为蓝色。 int buttonArray[] ={13, 10, 6, 3};// buttonArray[0]为绿色,buttonArray[1]为红色,buttonArray[2]为黄色,buttonArray[3]为蓝色。 int pinCount =4; // ledArray 和 buttonArray 都具有相同的 pinCount --> 对两个按钮和 LED 都使用它 int buzzer =8; int ledState =0; int gameState =0; #define NUMBERTOWIN 5 //你必须匹配才能获胜的灯的数量 --> 你可以改变这个数字来使游戏或多或少地赢得胜利 int gameValues[NUMBERTOWIN]; int roundNum =0; unsigned long previousMillis =0; // 需要这个用于游戏前状态以无延迟地闪烁灯光 --> 如果您使用延迟按钮开始游戏可能不会被注意到 unsigned long interval1 =500; //在两次闪烁之间需要这个时间 //声明函数void setLed(int ledNum);void displayClue(int roundNum);boolean waitForInput(int buttonNum);无效设置(){Serial.begin(9600);Serial.println(“设置”); for(int Pin =0; Pin  函数 setLed() 声明如果 ledNum <0 led 是低 setLed(-1); //将轮数设置为零,以便您从第一轮开始 roundNum =0;延迟(1000); //设置gameState为1 gameState =1; } } if (gameState ==1) { gamePlay(); } if (gameState ==2) { //你赢了!! - 播放获胜声音并滚动 LED (winDisplay) 3 次,然后丢失显示一次以实现良好的过渡。 //延迟让玩家有时间在获胜声音播放之前释放按钮按下延迟(500);获胜声音();赢显示();赢显示();赢显示();失去显示(); Serial.println("winDisplay"); //在运行pre_game延迟(1000)之前短暂延迟; //将gameState重置为零以调用pre_game gameState =0; } if (gameState ==3) { //你输了:( - 播放丢失的声音和闪烁的 LED (loseDisplay)3 次以获得良好的过渡。//延迟让玩家有时间在丢失声音播放之前释放按钮按下延迟(500); loss_sound(); lossDisplay(); lossDisplay(); lossDisplay(); Serial.println("loseDisplay"); // 在运行 pre_game 之前短暂延迟 delay (1000); // 将 gameState 重置为零以调用 pre_game gameState =0; } }//pre_gamevoid pre_game(){ //检查 LED 点亮之间是否经过了足够的时间 unsigned long currentMillis =millis(); if (currentMillis - previousMillis> interval1) { //如果经过了足够的时间更新灯 if ( ledState ==0) { Serial.println("pre green"); setLed(0); ledState =1; } else if (ledState ==1) { Serial.println("pre red"); setLed(1); ledState =2; } else if (ledState ==2) { Serial.println("pre Yellow"); setLed(2); ledState =3; } else if (ledState ==3) { Serial.println("pre blue "); setLed(3); ledState =0; } //重置时间 previousMillis =currentMillis; }}//游戏进行时的函数void gamePlay(){ Serial.println("gamePlay"); //为游戏预加载带有随机数的数组 for ( int i=0; i 如果按下任何按钮,则转到其余代码 if (!button0 || !button1 || !button2 || !button3) { // 短暂延迟以避免重复计算按钮按下延迟( 250); //按下按钮时点亮对应的LED if (buttonNum ==0) { digitalWrite(ledArray[0], HIGH);延迟(250);数字写入(ledArray[0],低); } else if (buttonNum ==1) { digitalWrite(ledArray[1], HIGH);延迟(250);数字写入(ledArray[1],低); } else if (buttonNum ==2) { digitalWrite(ledArray[2], HIGH);延迟(250);数字写入(ledArray[2],低); } else if (buttonNum ==3) { digitalWrite(ledArray[3], HIGH);延迟(250);数字写入(ledArray[3],低); } //检查是否按下了正确的按钮 if (buttonNum ==0 &&button0 ==0) { Serial.println("0 Pressed");返回真; } else if (buttonNum ==1 &&button1 ==0) { Serial.println("1 Pressed");返回真; } else if (buttonNum ==2 &&button2 ==0) { Serial.println("2 Pressed");返回真; } else if (buttonNum ==3 &&button3 ==0) { Serial.println("3 Pressed");返回真; } else { 返回假; } } }}//获胜后 - 让灯快速滚动void winDisplay(){digitalWrite(ledArray[0], HIGH);delay(75);di​​gitalWrite(ledArray[0], LOW);delay(75);di​​gitalWrite(ledArray) [1], HIGH);delay(75);di​​gitalWrite(ledArray[1], LOW);delay(75);di​​gitalWrite(ledArray[2], HIGH);delay(75);di​​gitalWrite(ledArray[2], LOW) );延迟(75);di​​gitalWrite(ledArray[3], HIGH);delay(75);di​​gitalWrite(ledArray[3], LOW);delay(75);di​​gitalWrite(ledArray[2], HIGH);delay(75) );digitalWrite(ledArray[2], LOW);delay(75);di​​gitalWrite(ledArray[1], HIGH);delay(75);di​​gitalWrite(ledArray[1], LOW);delay(75);di​​gitalWrite(ledArray) [0], HIGH);delay(75);di​​gitalWrite(ledArray[0], LOW);delay(75);}void Winning_sound(void){ //tone (pin number, frequency - 我在网上查了一下这个我想要的音符频率,音调持续时间)Serial.println("buzzer1");音调(蜂鸣器,294, 250);延迟(200);音调(蜂鸣器,294, 250);延迟(200);音调(蜂鸣器,294, 250);延迟(200);音调(蜂鸣器,392, 500);延迟(500); Serial.println("第二个392");音调(蜂鸣器,392, 250);延迟(200);音调(蜂鸣器,440, 250);延迟(200);音调(蜂鸣器,392, 250);延迟(200);音调(蜂鸣器,440, 250);延迟(200);音调(蜂鸣器,494, 500);}void lossDisplay(){ digitalWrite(ledArray[0], HIGH);数字写入(ledArray[1],高);数字写入(ledArray[2],高);数字写入(ledArray[3],高);延迟(200);数字写入(ledArray[0],低);数字写入(ledArray[1],低);数字写入(ledArray[2],低);数字写入(ledArray[3],低);延迟(200);}void loss_sound(void){ Serial.println(“losing_sound”);音调(蜂鸣器,98, 250);延迟(250);音调(蜂鸣器,93, 250);延迟(250);音调(蜂鸣器,87, 250);延迟(250);}

示意图

simon_says_fritzing_Yb8EdKPqD4.fzz

制造工艺

  1. Arduino Gyroscope Game with MPU-6050
  2. Arduino 数字骰子
  3. DIY 37 LED 轮盘游戏
  4. Arduino 游戏控制器
  5. 摇杆游戏
  6. 便携式测距仪
  7. 像素追逐游戏
  8. 铜电镀
  9. NeoMatrix Arduino Pong
  10. 光序列创建器
  11. 制造 101:成为航空航天工业的一部分
  12. 制造 4 层 PCB 所涉及的流程 - 第 2 部分