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

Arduino Game By LCD

Componenten en benodigdheden

Arduino UNO
× 1
Adafruit RGB-achtergrondverlichting LCD - 16x2
× 1
Broodplank (algemeen)
× 1
Weerstand 220 ohm
× 1
SparkFun Drukknopschakelaar 12 mm
× 1
Jumperdraden (algemeen)
× 1
USB-A naar B-kabel
× 1

Apps en online services

Arduino IDE

Over dit project

De benodigde onderdelen zijn weergegeven in de afbeelding hierboven. Begin met de Arduino zonder stroom. Sluit de USB-kabel NIET aan. Dat zal in een latere stap gebeuren wanneer het tijd is om het te programmeren en het spel uit te proberen.

Verbindingen

Gebruik een lange aansluitdraad om het 5V-signaal op de Arduino helemaal links van de rode rij bovenaan het breadboard aan te sluiten.

Gebruik een lange aansluitdraad om het GND-signaal helemaal links van de zwarte (of blauwe op sommige breadboards) rij aan de bovenkant van de breadboard aan te sluiten.

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 - registreer selecteer
  • R/W - lezen/schrijven selecteren
  • E - activeringssignaal
  • DB0 - databit 0 (hier niet gebruikt)
  • DB1 - databit 1 (hier niet gebruikt)
  • DB2 - databit 2 (hier niet gebruikt)
  • DB3 - databit 3 (hier niet gebruikt)
  • DB4 - databit 4
  • DB5 - databit 5
  • DB6 - databit 6
  • DB7 - databit 7
  • LED+ - achtergrondverlichting LED positief
  • LED- - achtergrondverlichting LED negatief

Sluit met korte aansluitdraden GND en LED- (pin 1 en 16) aan op de zwarte rij bovenaan.

Sluit op dezelfde manier VCC (pin 2) aan op de rode rij bovenaan met een korte aansluitdraad.

Buig de draaddraden van de 220 Ω-weerstand (rood-rood-bruin gekleurde banden) en verbind deze tussen LED+ en de rode rij bovenaan het breadboard.

Gebruik langere aansluitdraden om de rest van de verbindingen te maken:

  • Verbind DB7 met Arduino pin 3
  • Verbind DB6 met Arduino pin 4
  • Verbind DB5 met Arduino pin 5
  • Verbind DB4 met Arduino pin 6
  • Sluit E aan op Arduino pin 9
  • Sluit R/W aan op Arduino pin 10 (of op zwarte rij bovenaan breadboard)
  • Sluit RS aan op Arduino pin 11
  • Verbind V0 met Arduino pin 12 (of met zwarte rij bovenaan breadboard)

Sluit de drukknop ergens aan de linkerkant van het LCD-scherm aan, schrijlings op het kanaal dat langs het midden van het breadboard loopt (zie afbeelding hierboven). Verbind een van de bovenste twee pinnen van de knop met de zwarte rij aan de bovenkant van het breadboard met behulp van een korte aansluitdraad. Verbind de andere pin bovenaan de knop met pin 2 van de Arduino.

Code

  • LCD_Game.ino
LCD_Game.inoArduino
#include #define PIN_BUTTON 2#define PIN_AUTOPLAY 1#define PIN_READWRITE 10#define PIN_CONTRAST 12#define SPRITE_RUN1 1#define SPRITE_RUN2 2#define SPRITE_JUMP 3#define SPRITE_JUMP_ // Gebruik de '.' karakter voor het hoofd#define SPRITE_JUMP_LOWER 4#define SPRITE_TERRAIN_EMPTY ' ' // Gebruiker het ' ' character#define SPRITE_TERRAIN_SOLID 5#define SPRITE_TERRAIN_SOLID_RIGHT 6#define SPRITE_TERRAIN_SOLID_LEFT 7#define HERO_HORIZONTAL_POSITION op scherm TERRAIN_EMPTY 0#define TERRAIN_LOWER_BLOCK 1#define TERRAIN_UPPER_BLOCK 2#define HERO_POSITION_OFF 0 // Held is onzichtbaar#define HERO_POSITION_RUN_LOWER_1 1 // Held loopt op de onderste rij (pose 1)#define HERO_POSITION_RUN_JUERO_2. / Een sprong starten#define HERO_POSITION_JUMP_2 4 // Halverwege omhoog#define HERO_POSITION_JUMP_3 5 // Sprong bevindt zich op de bovenste rij#define HERO_POSITION_JUMP_4 6 // Sprong bevindt zich op de bovenste rij#define HERO_POSITION_JUMP_5 7 // Sprong bevindt zich op de bovenste rij#define_ HERO_POSITION_ HERO_JUMP_4 8 // Sprong is op de bovenste rij#define HERO_POSITION_JUMP_7 9 // Halverwege#define HERO_POSITION_JUMP_8 10 // Gaat bijna landen#define HERO_POSITION_RUN_UPPER_1 11 // Hero draait op de bovenste rij (pose 1)#define HERO_POSITION_RUN_UPPER_2 12 // (pose 2)LiquidCrystal lcd(11, 9, 6, 5, 4, 3);static char terrainUpper[TERRAIN_WIDTH + 1];static char terrainLower [TERRAIN_WIDTH + 1];static bool buttonPushed =false;void initializeGraphics(){ static byte graphics[] ={ // Run positie 1 B01100, B01100, B00000, B01110, B11100, B01100, B11010, B10011, // Run positie 2 B01100, B01100, B00000, B01100, B01100, B01100, B01100, B01110, // Sprong B01100, B01100, B000000, B11110, B01101, B11111, B10000, B00000, // Onderste sprong B11110, B01101, B11111, B10000, B00000, B00000 , B00000, B00000, // Massa B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111, // Massa rechts B00011, B00011, B00011, B00011, B00011, B00011, B00011, B00011, // Massa links B11000, B11000, B11000, B11000, B11000, B11000, B11000, B11000, }; int ik; // Sla het gebruik van karakter 0 over, hierdoor kan lcd.print() worden gebruikt om // snel meerdere karakters te tekenen voor (i =0; i <7; ++i) { lcd.createChar(i + 1, &graphics[i * 8]); } for (i =0; i  9999) ? 5 :(score> 999) ? 4 :(score> 99) ? 3 :(score> 9) ? 2 :1; // Teken de scène terrainUpper[TERRAIN_WIDTH] ='\0'; terreinLower[TERRAIN_WIDTH] ='\0'; char temp =terrainUpper[16-cijfers]; terreinUpper[16-cijfers] ='\0'; lcd.setCursor(0,0); lcd.print(terrainUpper); terreinUpper[16-cijfers] =temp; lcd.setCursor(0,1); lcd.print(terreinLower); lcd.setCursor (16 - cijfers, 0); lcd.print(score); terreinUpper[HERO_HORIZONTAL_POSITION] =upperSave; terreinLower[HERO_HORIZONTAL_POSITION] =lagerOpslaan; return collide;}// Behandel de druk op de knop als een interruptvoid buttonPush() { buttonPushed =true;}void setup(){ pinMode(PIN_READWRITE, OUTPUT); digitalWrite (PIN_READWRITE, LAAG); pinMode (PIN_CONTRAST, UITGANG); digitalWrite (PIN_CONTRAST, LAAG); pinMode (PIN_BUTTON, INPUT); digitalWrite (PIN_BUTTON, HOOG); pinMode (PIN_AUTOPLAY, UITGANG); digitalWrite (PIN_AUTOPLAY, HOOG); // Digitale pin 2-kaarten om 0 attachInterrupt (0/*PIN_BUTTON*/, buttonPush, FALLING) te onderbreken; initializeGraphics(); lcd.begin (16, 2);}void loop(){ statische byte heroPos =HERO_POSITION_RUN_LOWER_1; statische byte newTerrainType =TERRAIN_EMPTY; statische byte newTerrainDuration =1; statische bool spelen =false; statische bool blink =false; statische niet-ondertekende int afstand =0; if (!playing) { drawHero((blink) ? HERO_POSITION_OFF :heroPos, terrainUpper, terrainLower, distance>> 3); if (knipper) { lcd.setCursor(0,0); lcd.print("Druk op Start"); } vertraging (250); knipperen =!knipperen; if (buttonPushed) { initializeGraphics(); heroPos =HERO_POSITION_RUN_LOWER_1; spelen =waar; buttonPushed =onwaar; afstand =0; } opbrengst; } // Verplaats het terrein naar links AdvanceTerrain (terrainLower, newTerrainType ==TERRAIN_LOWER_BLOCK ? SPRITE_TERRAIN_SOLID:SPRITE_TERRAIN_EMPTY); AdvanceTerrain (terrainUpper, newTerrainType ==TERRAIN_UPPER_BLOCK? SPRITE_TERRAIN_SOLID:SPRITE_TERRAIN_EMPTY); // Maak een nieuw terrein om rechts in te voeren if (--newTerrainDuration ==0) { if (newTerrainType ==TERRAIN_EMPTY) { newTerrainType =(random(3) ==0) ? TERRAIN_UPPER_BLOCK:TERRAIN_LOWER_BLOCK; newTerrainDuration =2 + willekeurig (10); } else { newTerrainType =TERRAIN_EMPTY; newTerrainDuration =10 + willekeurig (10); } } if (buttonPushed) { if (heroPos <=HERO_POSITION_RUN_LOWER_2) heroPos =HERO_POSITION_JUMP_1; buttonPushed =onwaar; } if (drawHero(heroPos, terrainUpper, terrainLower, distance>> 3)) { playing =false; // De held is ergens tegenaan gebotst. Jammer. } else { if (heroPos ==HERO_POSITION_RUN_LOWER_2 || heroPos ==HERO_POSITION_JUMP_8) { heroPos =HERO_POSITION_RUN_LOWER_1; } else if ((heroPos>=HERO_POSITION_JUMP_3 &&heroPos <=HERO_POSITION_JUMP_5) &&terrainLower[HERO_HORIZONTAL_POSITION] !=SPRITE_TERRAIN_EMPTY) { heroPos =HERO_POSITION_RUN_UPPER_1; } else if (heroPos>=HERO_POSITION_RUN_UPPER_1 &&terrainLower[HERO_HORIZONTAL_POSITION] ==SPRITE_TERRAIN_EMPTY) { heroPos =HERO_POSITION_JUMP_5; } else if (heroPos ==HERO_POSITION_RUN_UPPER_2) { heroPos =HERO_POSITION_RUN_UPPER_1; } else { ++heroPos; } ++afstand; digitalWrite (PIN_AUTOPLAY, terrainLower [HERO_HORIZONTAL_POSITION + 2] ==SPRITE_TERRAIN_EMPTY ? HOOG:LAAG); } vertraging(100);}

Schema's

Geen document.


Productieproces

  1. TinyML-taaldetector-gebaseerd op Edge Impulse &Arduino
  2. Arduino-gyroscoopspel met MPU-6050
  3. Arduino digitale dobbelstenen
  4. DIY 37 LED Roulette Game
  5. Arduino-gamecontroller
  6. Joystick-spel
  7. Vind mij
  8. Pixel Chaser-game
  9. DIY 10Hz-50kHz Oscilloscoop op 128x64 LCD-scherm
  10. Arduino Audio Reactive Desk Light
  11. NeoMatrix Arduino Pong