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

Dodge The Defs!

组件和用品

电阻 10k ohm
一个用于液晶屏的对比度,另一个用于按钮。重要:使用上拉电阻-down 配置,与手册中显示的上拉配置相反。
× 2
电阻 1k ohm
用于液晶屏的对比度。
× 1
SparkFun 按钮开关 12mm
× 1
Adafruit 标准 LCD - 16x2 蓝底白字
× 1
Arduino UNO
× 1
跳线(通用)
× 1

关于这个项目

背景

我参与了一个更大的项目,但有延迟。所以我决定用我的旧 Arduino 套件做点什么。我以前从未使用过 LCD 屏幕。所以,我将引脚焊接到屏幕上(我第一次学习焊接)。

最初,我从在线手册中复制了代码并上传了它。它只显示文本,左右移动。那是我被介绍到 LiquidCrystal 库的时候。我写了一个代码,让数字“0”在屏幕上弹跳,非常有趣。那时我想制作一些更复杂的东西,一个游戏。我在 arduino 上搜索了 lcd 游戏,发现只有 3 个游戏,其中 2 个对我有用。这些游戏的代码太复杂了,我看不懂,所以我决定做一个简单的游戏。

设置

如下图所示,用电线将 lcd 引脚连接到 arduino。

我使用了一个 10k 的电位器来调整对比度,并根据我想要的对比度进行调整。我用万用表测量了引脚之间的电阻,并为 LCD 的 VO 引脚使用了合适的电阻(串联 1k 和 10k 欧姆)。

在面包板上放置一个按钮,并将输入线连接到 arduino 上的引脚 8。将代码上传到您的 arduino,您就可以开始使用了。

注意:按键电阻在下拉模式下使用,如原理图所示。

玩游戏

在这个游戏中,你是一名足球运动员,球在你的腿上。你会有防御者接近你,你应该躲避他们。

介绍后,按要求按按钮。当防守者足够接近时,按下按钮跳跃。下一个防守者会以更快的速度接近,10个防守者会继续这样。

PS:我最初使用“0”作为控制,“1”作为障碍。由于 2018 年 FIFA 世界杯正在进行中,我自己也是梅西球迷,所以我决定改变主题。

我使用在线生成器为玩家和防守者制作了字形,链接在此提供:https://omerk.github.io/lcdchargen/

代码

  • lcd_1.ino
lcd_1.inoArduino
/* 躲避防御!!创建者:Shreyas R P 创建于:21-06-2018 电子邮件 ID:[email protected] 一个带有按钮的 16x2 LCD 的简单游戏。如果您对游戏进行任何改进或更改,请在行下方添加您的信用:享受 :) 版权所有 (C) 2018 Shreyas RP 该程序是免费软件:您可以根据 GNU 条款重新分发和/或修改它由自由软件基金会发布的通用公共许可证,许可证的第 3 版,或(由您选择)任何更高版本。分发此程序是希望它有用,但不作任何保证;甚至没有对适销性或针对特定目的的适用性的暗示保证。有关更多详细信息,请参阅 GNU 通用公共许可证。您应该已经收到一份 GNU 通用公共许可证以及该程序。如果没有,请参阅 。 -------------------------------------------------- ---------------------------------------------------- */#include const int btn =8; //按钮输入引脚//要显示的文本char* introText[]={"Dodge the defs!!","Created on:", "Hit the button..."};//变量声明int game=0;int buttonPress =0; int buttonState=0;int障碍Pos;int obsDelay;int score=0;unsigned long lastDebounceTime =0; // 上次切换输出引脚无符号长 debounceDelay =50; INT lastButtonState =LOW; // GRAPHICSbyte runnin1 [8] ={0b01100,0b01100,0b00000,0b11100,0b01110,0b01100,0b11110,0b00011};字节runnin2 [8] ={0b00110,0b00110,0b00000,0b00111,0b01110,0b00110, 0b01110,0b00101};字节跳[8] ={0b00100,0b01100,0b11100,0b01110,0b01100,0b11111,0b00000,0b00001};字节DEF1 [8] ={0b00100,0b00110,0b00111,0b01110,0b00110,0b01111,0b01000, 0b00000};字节DEF2 [8] ={0b00100,0b00110,0b00111,0b01110,0b00110,0b00110,0b00110,0b00010};字节滑动[8] ={0b00000,0b00000,0b00011,0b00011,0b00000,0b01111,0b11111,0b00000}; LiquidCrystal lcd(4,6,10,11,12,13)​​;void setup() {Serial.begin(9600); pinMode(btn,输入);液晶显示器。开始(16,2); lcd.createChar(0,runnin1); lcd.createChar(1,runnin2); lcd.createChar(2,jump); lcd.createChar(3,def1); lcd.createChar(4,def2); lcd.createChar(5,slide); buttonState=digitalRead(btn);}void loop(){ intro(); while(game==1) ballActive();结束游戏(); }无效介绍(){分数=0;液晶显示器(); lcd.print(introText[0]); //不用声明introText,直接打印“...” lcd.setCursor(7,1); lcd.print("由 SRP888");延迟(2000);液晶显示器(); lcd.print(introText[1]); lcd.setCursor(0,1); lcd.print("21-06-2018");延迟(2000);液晶显示器(); while(button()!=1) //等待用户点击按钮,显示文本直到点击。 { lcd.setCursor(0,0); lcd.print(introText[2]);延迟(100); } if(button()==1) game=1; } void reset() { if(obstaclePos%2==0) //将玩家的显示从一种姿势改变为另一种姿势以显示他正在跑步,巧妙地使用了障碍Pos。 {液晶。清除(); lcd.setCursor(0,1);液晶显示器(字节(0)); } else { lcd.clear(); lcd.setCursor(0,1);液晶显示器(1); } } void ballActive() { obsDelay=200; //防御者的初始延迟障碍Pos=15; //因为它是一个 16x2 的液晶显示器,索引从 0 开始。 while(game==1) { reset(); if(button()==1) //如果按钮被按下。 {液晶。清除(); lcd.setCursor(0,0);液晶显示器(2); //打印玩家跳跃障碍物(obstaclePos); //打印防御者延迟(400); //这是为了防止显示快速消失而被忽视。液晶显示器(); lcd.setCursor(0,1);液晶显示器(1); //将玩家打印回地面障碍物(obstaclePos); //打印防御者 } else { if(obstaclePos!=0) //如果防御者没有接近玩家,则继续。 { 重启();障碍(obstaclePos); } else if(obstaclePos==0) //如果防守方在0位置,即当他在地面上时,他已经接近玩家,然后结束游戏。 {游戏=0;休息; } } 障碍Pos--; //使防守者靠近玩家 if(obstaclePos<0) //如果玩家成功躲避,则 { obsDelay=obsDelay-20; //减少延迟(增加速度),障碍Pos=15; //将防守者带到起始位置,得分++; //并将分数增加1。 } if(obsDelay==0) //如果有10名玩家被躲避(因为200/20=10),则结束游戏game=0;延迟(obsDelay); } }int button() { int reading =digitalRead(btn); // 如果开关由于噪音或按下而改变: if (reading !=lastButtonState) { // 重置去抖动计时器 lastDebounceTime =millis(); } if ((millis() - lastDebounceTime)> debounceDelay) { buttonState =reading;如果(buttonState ==HIGH){ lastButtonState =阅读;返回 1; } } lastButtonState =reading;}void barrier(int i){ if(obstaclePos%2==0&&barrierPos>2) //如果防守者离玩家很远,则显示他正在运行 { lcd.setCursor(i,1);液晶显示器(3); } else if(obstaclePos%2!=0&&barrierPos>2) { lcd.setCursor(i,1);液晶显示器(4); } else //如果他离玩家近2步,则显示他滑动{ lcd.setCursor(i,1);液晶显示器(5); }}void endGame(){ if(score==10) { lcd.clear(); lcd.print("恭喜!"); lcd.setCursor(0,1); lcd.print("你打败了他们");延迟(3000); } else if(score<3) { lcd.clear(); lcd.print("你太烂了"); lcd.setCursor(0,1); lcd.print("分数:"); lcd.print(分数);延迟(3000); } else if(score<6) { lcd.clear(); lcd.print("还不错!"); lcd.setCursor(0,1); lcd.print("分数:"); lcd.print(分数);延迟(3000); } else { lcd.clear(); lcd.print("太棒了!"); lcd.setCursor(0,1); lcd.print("分数:"); lcd.print(分数);延迟(3000); }}

示意图


制造工艺

  1. 原型颂
  2. 产品设计的挑战
  3. 四极管
  4. 液晶显示器 (LCD)
  5. Raspberry Pi 上的温度监控
  6. 展览:原始展示
  7. 无人机 Pi
  8. 阿基米德:人工智能机器人猫头鹰
  9. 战略数据采购是避免中断的现代方法
  10. 工业触摸屏维修的秘诀
  11. Walbi,步行两足动物
  12. 最好的吹叶机