Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Ninja Dollar - LCD-spel

Componenten en benodigdheden

Arduino UNO
× 1
Adafruit Standaard LCD - 16x2 Wit op Blauw
× 1
Broodplank (algemeen)
Ik heb er twee gebruikt voor meer ruimte, je kunt maar één breadboard gebruiken.
× 2
Single Turn Potentiometer - 10k ohm
× 1
LED (generiek)
× 2
Weerstand 1k ohm
× 4
SparkFun Drukknopschakelaar 12 mm
× 2
RobotGeek Buzzer
× 1
Jumperdraden (algemeen)
× 1

Benodigde gereedschappen en machines

Soldeerbout (algemeen)
Voor het solderen van LCD

Over dit project

Dit is een eenvoudig LCD-spel. Mijn inspiratie was het Dinosaur-spel van Google Chrome, maar ik heb er nog een paar wijzigingen aan toegevoegd. De dollarstrijder beweegt constant en hij kan springen om de obstakels te ontwijken en de "ster" -punten te verzamelen. Als hij over het obstakel springt, verzamelt hij één punt en als hij de ster vangt, verzamelt hij vijf punten. Hij kan ook schieten en de obstakels voor hem verwijderen. Er zijn ook led-diodes die aangeven of hij springt of schiet. Wanneer hij 10, 20 of 30 punten verzamelt, begint hij sneller te bewegen dan voorheen. Als hij 50 punten verzamelt, win je. Als je het obstakel raakt, verlies je. Natuurlijk kunt u deze grenzen eenvoudig in de code wijzigen. Ik heb ook een passieve zoemer toegevoegd die geluid maakt wanneer de krijger springt of schiet en een speciale melodie wanneer je verliest of wint. Dit is mijn eerste project hier en ik hoop dat jullie het leuk vinden. Geef me je opmerkingen en recensies.

De video

Verbindingen

De LCD-module (Liquid Crystal Display) heeft een 16-pins mannelijke header aan de onderkant. Steek deze in het breadboard zoals op de afbeelding. Alle elektronische signalen die het LCD-scherm van stroom voorzien en besturen, gaan via deze header.

Deze pinnen zijn (van links naar rechts):

  • GND - aardingssignaal
  • VCC - positief voedingssignaal
  • V0 - contrast aanpassen
  • RS - registreren selecteren
  • R/W - lezen/schrijven selecteren
  • E - signaal inschakelen
  • D0 - databit 0 (hier niet gebruikt)
  • D1 - databit 1 (hier niet gebruikt)
  • D2 - databit 2 (hier niet gebruikt)
  • D3 - databit 3 (hier niet gebruikt)
  • D4 - databit 4
  • D5 - databit 5
  • D6 - databit 6
  • D7 - databit 7
  • A - achtergrondverlichting LED positief
  • K - achtergrondverlichting LED negatief

Gebruik een jumperdraad om het 5V-signaal op de Arduino te verbinden met de rode rij bovenaan het breadboard.

Gebruik een jumperdraad om het GND-signaal op de Arduino te verbinden met de blauwe rij bovenaan het breadboard.

  • Verbind VSS-pin met aarde
  • Verbind de VDD-pin met het 5V-signaal
  • V0-pin naar de uitgangspin van de potentiometer
  • RS-pin naar Arduino-pin 12
  • RW pin op de grond
  • E-pin naar Arduino-pin 11
  • D4 naar Arudino-pin 5
  • D5 naar arduino pin 4
  • D6 naar Arduino pin 3
  • D7 naar Arduino pin 2
  • Een pin naar het 5V-signaal
  • K-pin naar het GND-signaal

Sluit de resterende potentiometerpinnen aan op het 5V-signaal en het GND-signaal.

Als je een 3-pins piëzo-zoemer hebt, sluit je de S-pin aan op de Arduino 7-pin, de '-'-pin op de GND en de resterende pin op het 5V-signaal. Als je een piëzo-zoemer met 2 pins hebt, sluit je de ene pin aan op het GND-signaal en de andere op de Arduino 7-pin.

Sluit de schakelknoppen aan volgens het schema. De eerste knop (springknop) is verbonden met de Arduino-pin 1 en de tweede (shoot-knop) is verbonden met de Arduino-pin 6. De leds worden alleen bestuurd door de knoppen en niet door Arduino. De anode is verbonden met de knoppin die is verbonden met de Arduino en de kathode is verbonden met de grond.

Code

  • 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;//willekeurig getal voor positie van obstakels in randomNums[6];//willekeurig getal voor aantal obstakels in randomNum=0;// willekeurig getal voor positie van ptsint randomNums1[3];//willekeurig getal voor aantal ptsint randomNum1=0;//startvertragingstijd, die geleidelijk afneemt unsigned int myDelay=500;// deze boolean gemaakt om te controleren of knop 2 is ingedrukt, want als het is eenmaal ingedrukt in de eerste for-lus. Ik wil dat obstakels niet worden geschreven tot het einde van itbool temp=0;//deze variabele slaat de posities van de krijger op terwijl hij schiet. er kunnen 16 posities zijn omdat de krijger 16 posities heeft.int tempI[16];//ik gebruik deze boolean om te controleren of het punt catched isbool temp1=0;//gebruik deze variabele om de positie van het gevangen punt op te slaan. het moet en array zijn om de positie van alle punten in één iteratie van de eerste for-lus op te slaan. als het slechts één positie opsloeg, zou het "oude" punt terugkomen in de nieuwe iteratieint tempI1[3]; // gebruik deze variabele om een ​​aantal opnamen van de krijger te maken, wat ook de lengte is van een array tempIint button2IsPressed=0;LiquidCrystal lcd(rs, en, d4, d5, d6, d7);void setup() { / / stel het aantal kolommen en rijen van het LCD-scherm in:lcd.begin (16, 2); // stel knoppin-modus pinMode (buttonPin1, INPUT) in; pinMode (knopPin2, INPUT); pinMode (zoemer, UITGANG); lcd.setCursor(4,0); lcd.print("HET SPEL"); lcd.setCursor(2,1); lcd.print("BEGINT IN "); lcd.print("5"); vertraging (1000); lcd.setCursor (12,1); lcd.print("4"); vertraging (1000); lcd.setCursor (12,1); lcd.print("3"); vertraging (1000); lcd.setCursor (12,1); lcd.print("2"); vertraging (1000); lcd.setCursor (12,1); lcd.print("1"); vertraging (1000); lcd.clear();}void loop() { hier:randomNum=random(5); for(int i=0; i9 &&pts<20) {lcd.setCursor(14,0); mijnVertraging=400; } else if(pts>19 &&pts<30) { lcd.setCursor(14,0); mijnVertraging=300; } else if(pts>29 &&pts<50) { myDelay=200; lcd.setCursor(14,0); } else if(pts>=50){ pts=0; mijnVertraging=500; lcd.wissen(); lcd.setCursor(5,0); lcd.print("OVERWINNING"); toon(zoemer,262); vertraging (200); toon (zoemer, 330); vertraging (200); toon(zoemer,392); vertraging (100); toon (zoemer, 330); vertraging (100); toon(zoemer,392); vertraging (100); toon (zoemer, 523); vertraging (200); geen toon (zoemer); vertraging (3000); lcd.wissen(); ga hier; } else lcd.setCursor(15,0); lcd.print(pts); buttonState1=digitalRead(buttonPin1); buttonState2=digitalRead(buttonPin2); // obstakels plaatsen als de krijger niet schoot of hij schoot, maar hij sprong ook if(!temp){ for(int j=0; jrandomNums[j]){ lcd.setCursor(randomNums[j],1); lcd.print("#"); } } } //setting ptsif(!temp1){ for(int j=0; j  

Schema's

game_aUIjA6VZxX.fzz

Productieproces

  1. Schaken
  2. Flipperkast
  3. Voetbal
  4. Arduino-gyroscoopspel met MPU-6050
  5. DIY 37 LED Roulette Game
  6. 3D RGB Arduclock
  7. MyRiver
  8. Joystick-spel
  9. Vind mij
  10. DIY 10Hz-50kHz Oscilloscoop op 128x64 LCD-scherm
  11. Little Rover