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

Ninja Dollar - LCD 游戏

组件和用品

Arduino UNO
× 1
Adafruit 标准 LCD - 16x2 蓝底白字
× 1
面包板(通用)
我用了两个空间更大,你只能用一个面包板。
× 2
单圈电位器 - 10k ohms
× 1
LED(通用)
× 2
电阻 1k ohm
× 4
SparkFun 按钮开关 12mm
× 2
RobotGeek Buzzer
× 1
跳线(通用)
× 1

必要的工具和机器

烙铁(通用)
用于焊接 LCD

关于这个项目

这是一个简单的液晶游戏。我的灵感来自谷歌浏览器的恐龙游戏,但我对其进行了一些更改。美元战士不断移动,他可以跳跃避开障碍物并收集“星”点。如果他跳过障碍物,他会得到一分,如果他抓住了星星,他就会得到五分。他还可以射击并清除面前的障碍物。还有LED二极管指示他是跳跃还是射门。当他收集到 10、20 或 30 点时,他开始比以前更快地移动。当他收集到 50 分时,你就赢了。如果你撞到障碍物,你就输了。当然,您可以在代码中轻松更改这些边界。我还添加了被动蜂鸣器,当战士跳跃或射击时会发出声音,当你输或赢时会发出特殊的旋律。这是我在这里的第一个项目,希望你喜欢。给我您的意见和评论。

视频

连接

LCD(液晶显示器)模块底部有一个 16 针公头。如图所示将其插入面包板。所有为 LCD 供电和控制的电子信号都通过这个接头。

这些引脚是(从左到右):

  • GND - 电源地信号
  • VCC - 正电源信号
  • V0 - 对比度调整
  • RS - 注册选择
  • R/W - 读/写选择
  • E - 启用信号
  • D0 - 数据位 0(此处未使用)
  • D1 - 数据位 1(此处未使用)
  • D2 - 数据位 2(此处未使用)
  • D3 - 数据位 3(此处未使用)
  • D4 - 数据位 4
  • D5 - 数据位 5
  • D6 - 数据位 6
  • D7 - 数据位 7
  • A - 背光 LED 正极
  • K - 背光 LED 负片

用跳线将Arduino上的5V信号与面包板顶部的红排相连。

使用跳线将Arduino上的GND信号与面包板顶部的蓝色行连接起来。

  • 将 VSS 引脚接地
  • 将 VDD 引脚连接到 5V 信号
  • V0 引脚连接到电位器输出引脚
  • RS 引脚到 Arduino 引脚 12
  • RW 引脚接地
  • E 引脚到 Arduino 引脚 11
  • D4 到 Arudino 引脚 5
  • D5 到 arduino pin 4
  • D6 到 Arduino 引脚 3
  • D7 到 Arduino 引脚 2
  • 连接 5V 信号的引脚
  • K 引脚到 GND 信号

将剩余的电位器引脚连接到 5V 信号和 GND 信号。

如果您有 3 个固定的压电蜂鸣器,请将 S 引脚连接到 Arduino 7 引脚,将“-”引脚连接到 GND,将其余引脚连接到 5V 信号。如果您有 2 个固定的压电蜂鸣器,请将一个引脚连接到 GND 信号,另一个连接到 Arduino 7 引脚。

根据原理图连接开关按钮。第一个按钮(跳跃按钮)连接到 Arduino 引脚 1,第二个(拍摄按钮)连接到 Arduino 引脚 6。 LED 仅由按钮控制,而不由 Arduino 控制。阳极连接到连接到Arduino的按钮引脚,阴极连接到地。

代码

  • dollar_warrior
dollar_warriorArduino
#include const int rs =12, en =11, d4 =5, d5 =4, d6 =3, d7 =2;const int buttonPin1=1;const int buttonPin2=6;const int buzzer=7;unsigned long pts=0;//set buttonstatesbool buttonState1=0;bool buttonState2=0;//障碍物位置随机数int randomNums[6];//障碍物数量随机数int randomNum=0;// ptsint 位置的随机数 randomNums1[3];//ptsint 数的随机数 randomNum1=0;// 开始延迟时间,逐渐减少 unsigned int myDelay=500;// 设置这个布尔值来检查 button2 是否被按下,因为如果它在第一个 for 循环中被按下一次我希望障碍物直到 itbool temp=0 结束时才被写入;//这个变量存储了战士在射击时的位置。可以有 16 个位置,因为战士有 16 个位置。int tempI[16];//我使用这个布尔值来检查该点是否被捕获bool temp1=0;//使用这个变量来存储捕获点的位置。它必须是和数组来存储第一个 for 循环的一次迭代中所有点的位置。如果它只存储一个位置,那么“旧”点将在新的迭代中返回int tempI1[3]; //使用这个变量可以得到战士的射击次数,也是一个数组的长度 tempIint button2IsPressed=0;LiquidCrystal lcd(rs, en, d4, d5, d6, d7);void setup() { / / 设置 LCD 的列数和行数:lcd.begin(16, 2); // 设置按钮模式 pinMode(buttonPin1,INPUT); pinMode(buttonPin2,INPUT); pinMode(蜂鸣器,输出); lcd.setCursor(4,0); lcd.print("游戏"); lcd.setCursor(2,1); lcd.print("开始");液晶打印(“5”);延迟(1000); lcd.setCursor(12,1);液晶打印(“4”);延迟(1000); lcd.setCursor(12,1);液晶打印(“3”);延迟(1000); lcd.setCursor(12,1);液晶打印(“2”);延迟(1000); lcd.setCursor(12,1);液晶打印(“1”);延迟(1000); lcd.clear();}void loop() { 这里:randomNum=random(5); for(int i=0; i9 &&pts<20) {lcd.setCursor(14,0);我的延迟=400; } else if(pts>19 &&pts<30) { lcd.setCursor(14,0);我的延迟=300; } else if(pts>29 &&pts<50) { myDelay=200; lcd.setCursor(14,0); } else if(pts>=50){ pts=0;我的延迟=500;液晶显示器(); lcd.setCursor(5,0); lcd.print("胜利");音调(蜂鸣器,262);延迟(200);音调(蜂鸣器,330);延迟(200);音调(蜂鸣器,392);延迟(100);音调(蜂鸣器,330);延迟(100);音调(蜂鸣器,392);延迟(100);音调(蜂鸣器,523);延迟(200); noTone(蜂鸣器);延迟(3000);液晶显示器();到这里; } else lcd.setCursor(15,0);液晶打印(pts); buttonState1=digitalRead(buttonPin1); buttonState2=digitalRead(buttonPin2); //设置障碍,如果战士没有射击或他射击但他也跳了 if(!temp){ for(int j=0; jrandomNums[j]){ lcd.setCursor(randomNums[j],1); lcd.print("#"); } } } //设置ptsif(!temp1){ for(int j=0; j 

示意图

game_aUIjA6VZxX.fzz

制造工艺

  1. 国际象棋
  2. 弹球
  3. 足球
  4. Arduino Gyroscope Game with MPU-6050
  5. DIY 37 LED 轮盘游戏
  6. 3D RGB Arduclock
  7. MyRiver
  8. 摇杆游戏
  9. 找到我
  10. DIY 10Hz-50kHz 示波器在 128x64 LCD 显示器上
  11. 小流浪者
  12. ThingSpeak Arduino 气象站