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

LCD Hill Run v2 – Interactieve Arduino Rennergame met 16x2 LCD en Buzzer

Onderdelen en benodigdheden

Arduino Mega 2560 OF een Arduino UNO!! Verander DUCK_PIN in de code naar 3 en herbewaar dienovereenkomstig als je een Uno wilt gebruiken 1
Jumper wires (generiek) +/- 20 nodig 20
SparkFun Drukknop 12mm 2
Weerstand 10k ohm 2
Adafruit Standaard LCD - 16x2 Wit op Blauw 1
Draaipotentiometer, 10 kohm elke willekeurige potentiometer 1
Buzzer Passieve buzzer ideaal, actieve buzzer of piezo buzzer KUNNEN werken. Niet vereist voor functionaliteit, puur voor de pret. KOOP NIET het gelinkte product! Het is onjuist; een buzzer kost niet $225. 1
Breadboard (generiek) Volle grootte wordt aanbevolen 1

Apps en online diensten

Arduino IDE Of web editor als je die gebruikt.

Over dit project

Ik ben nog een kind en grotendeels een amateur op Arduino-gebied. Na het lezen van enkele Project Hub-projecten en het leren van Arduino, werd geïnspireerd om deze leuke game te maken. Het vereiste niet veel debuggen en is echt cool. De code is naar mijn standaards redelijk netjes. VEEL PLEZIER!! Wees respectvol en laat een reactie achter.

Vergeet niet de bibliotheken die in dit programma zitten te downloaden en in de map te zetten. Als er een foutmelding komt dat de bibliotheek niet gevonden kan worden, gebruik dan Schets > Bibliotheek toevoegen. Reageer als je problemen hebt.

Bibliotheken vind je op https://github.com/PunkyMunky64/HillRun2Libraries

Code

Hill Run v2 code

De code. Verander DUCK_PIN naar 3 als je een UNO wilt gebruiken in plaats van een Mega. De code is best compact en netjes, als ik dat zelf mag zeggen.

/* 
 * Copyright (c) 2020 door Miles C. Een verbeterde versie van Hill Run met interrupts voor betere code.
 * LET OP: DUCK_PIN IS 18 IN PLAATS VAN 4 OMWEGENS INTERRUPT-MOGELIJKHEDEN!
 * Hill Run, een leuke game waar je over heuveltjes springt en onder kraaien duikt.
 * Aansluiting:
 * Arduino +5V naar breadboard voedingsbus
 * Arduino GND naar breadboard grondbus
 * Springknop met 10k pull-down naar grond, en naar digitale pin 2, andere kant naar +5V.
 * Duikknop met 10k pull-down naar grond, en naar digitale pin 18, andere kant naar +5V.
 * Passieve buzzer met één kant op grond en één op digitale PWM pin 5.
 * 16x2 16-pin LCD scherm met standaard Arduino-aansluiting, zoals in de LCD-les:
 * -K naar grond
 * -A naar +5V
 * -D4 tot D7 naar pinnen 9 tot 12
 * -E naar pin 8
 * -RW naar grond
 * -RS naar pin 7
 * -V0 naar potentiometer uitgang, voor helderheid, potentiometer verbonden met +5V en grond
 * -VDD naar +5V
 * -VSS naar grond
 */
#include <LiquidCrystal.h>
#include "pitches.h"

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
const int JUMP_PIN = 2;
const int BUZZER_PIN = 5;
const int DUCK_PIN = 18; //verander naar 3 als je een UNO wilt gebruiken
const int JUMP_PITCH = 2700; //geluid bij indrukken knop
const int JUMP_PITCH_DURATION = 50;
const int DUCK_PITCH = 1350;
const int DUCK_PITCH_DURATION = 50;
const int DIE_PITCH = 200; //geluid bij dood
const int DIE_PITCH_DURATION = 500;
const int TICKSPEED = 90; //ms per gametick, 1 gametick per heuvelbeweging
const int JUMP_LENGTH = 3; //karakters oversprongen bij sprong

const byte stickStep1[8] = { B01110, B01110, B00101, B11111, B10100, B00110, B11001, B00001 };
const byte stickStep2[8] = { B01110, B01110, B00101, B11111, B10100, B00110, B01011, B01000 };
const byte stickJump[8] = { B01110, B01110, B00100, B11111, B00100, B11111, B10001, B00000 };
const byte stickDuck[8] = { B00000, B00000, B00000, B01110, B01110, B11111, B00100, B11111 };
const byte hill[8] = { B00000, B00100, B01010, B01110, B11101, B10101, B11001, B11111 };
const byte crow1[8] = { B00111, B00100, B00110, B01111, B11111, B01111, B00110, B00111 };
const byte crow2[8] = { B00111, B00110, B01111, B11111, B01111, B00110, B00110, B00111 };

volatile int jumpPhase = JUMP_LENGTH + 1;
int gameTick = 0;
int crowX = 40;
int hillX = 25;
bool playerY = 0;
volatile bool ducking = LOW;
bool loopBreaker = 1;
bool crowGo = 0;
int score = 0;

void setup() {
  pinMode(JUMP_PIN, INPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  lcd.begin(16, 2);
  lcd.createChar(0, hill);
  lcd.createChar(1, stickStep1);
  lcd.createChar(2, stickStep2);
  lcd.createChar(3, stickJump);
  lcd.createChar(4, stickDuck);
  lcd.createChar(5, crow1);
  lcd.createChar(6, crow2);
  attachInterrupt(digitalPinToInterrupt(JUMP_PIN), seeJumping, RISING);
  attachInterrupt(digitalPinToInterrupt(DUCK_PIN), seeDucking, CHANGE);
}

void loop() {
  playerY = 0;
  if (jumpPhase < JUMP_LENGTH) {
    playerY = 1;
  }
  drawSprites();
  loopBreaker = 1;
  if (hillX < 16) {
    if (crowX < hillX) {
      hillX += 8;
      loopBreaker = 0;
    }
    if (loopBreaker) {
      lcd.setCursor(hillX, 1);
      lcd.write((byte)0);
    }
  }
  if (hillX < 1) {
    if (jumpPhase < JUMP_LENGTH) {
      score++;
      hillX = 16 + rand() % 8;
    } else {
      endGame();
    }
  }
  if (crowX < 16) {
    lcd.setCursor(crowX, 0);
    if (gameTick % 8 < 4) {
      lcd.write((byte)5);
    } else {
      lcd.write((byte)6);
    }
  }
  if (crowX < 1) {
    if (ducking) {
      score++;
      crowX = 24 + rand() % 16;
    } else {
      endGame();
    }
  }
  lcd.setCursor(0, playerY);
  lcd.print(" ");
  jumpPhase++;
  hillX--;
  crowGo = !crowGo;
  crowX -= crowGo;
  gameTick++;
  delay(TICKSPEED);
}

void endGame() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Score: ");
  lcd.setCursor(7, 0);
  lcd.print(score);
  tone(BUZZER_PIN, DIE_PITCH, DIE_PITCH_DURATION);
  while (!digitalRead(JUMP_PIN)) {
    lcd.setCursor(0, 1);
    if (millis() % 500 < 250) {
      lcd.print("Spring om door te gaan");
    } else {
      lcd.print(" ");
    }
  }
  lcd.clear();
  score = 0;
  hillX = 25;
  crowX = 40;
}

void drawSprites() {
  lcd.setCursor(0, 1 - playerY);
  if (!ducking) {
    if (!playerY) {
      if ((gameTick % 4) < 2) {
        lcd.write((byte)1);
      } else {
        lcd.write((byte)2);
      }
    } else {
      lcd.write((byte)3);
    }
  } else {
    lcd.write((byte)4);
  }
  lcd.setCursor(1, 1);
  lcd.print(" ");
  lcd.setCursor(1, 0);
  lcd.print(" ");
}

void seeJumping() {
  if (jumpPhase > (JUMP_LENGTH + 2) && !ducking) {
    jumpPhase = 0;
    tone(BUZZER_PIN, JUMP_PITCH, JUMP_PITCH_DURATION);
  }
}

void seeDucking() {
  ducking = digitalRead(DUCK_PIN);
  if (ducking) {
    jumpPhase = JUMP_LENGTH;
    tone(BUZZER_PIN, DUCK_PITCH, DUCK_PITCH_DURATION);
  }
}

README

"Geniet van deze Hillrun-game! Spring over heuvels door op spring te drukken, en duik onder kraaien door duik ingedrukt te houden. BOTS NIET! Als je sterft, druk op spring om verder te gaan. Score = kraaien gedoken + heuvels oversprongen. GA NAAR https://create.arduino.cc/projecthub/PunkyMunky64/lcd-hill-run-v2-runner-game-1b0523 voor meer info. Ik ben maar 12 jaar oud en grotendeels amateur op Arduino. Na het lezen van enkele Project Hub-projecten en het leren van Arduino, werd ik geïnspireerd om deze leuke game te maken. Het vereiste niet veel debuggen en is echt cool. De code is naar mijn standaards redelijk netjes. VEEL PLEZIER!! Wees respectvol en reageer. Vergeet niet de bibliotheken te downloaden en in de map te zetten. Als er een foutmelding komt dat de bibliotheek niet gevonden kan worden, gebruik dan Schets > Bibliotheek toevoegen. Reageer als je problemen hebt. Bibliotheken op https://github.com/PunkyMunky64/HillRun2Libraries ALS JE EEN UNO WILT GEBRUIK: in de code verander const int DUCK_PIN naar 3. en bewaar de duikknop van pin 18 naar digitale pin 3. Copyright (c) HillRun2.ino door Miles C. 2020 onder GNU General Public License. Voor aansluitschema en benodigde onderdelen, bezoek de bovenstaande Arduino-pagina."

Schema's

Schakeling Diagram Schema
hillrun2_zp0SI4wns3.fzz
Dit is het HillRun aansluitschema. ALS JE EEN UNO WILT GEBRUIK: in de code verander const int DUCK_PIN naar 3. en bewaar de duikknop van pin 18 naar digitale pin 3.

Productieproces

  1. Bouw een real-time gyroscoop-spel met Arduino Nano & MPU-6050 sensor
  2. Bouw een Klassiek Pong-spel op Arduino UNO met OLED-display – Stap-voor-stap Tutorial
  3. DIY Arduino USB Gaming Controller – Bouw Je Eigen High-Performance Gamepad
  4. Bouw Boeiende LCD Animaties & Games met Arduino UNO
  5. Arduino Touch Breakout-spel: Bouw een Klassieke Arcade op een 2,4″ TFT LCD
  6. Pixel Chaser: Interactieve één-tik LED-spel met Arduino Nano
  7. Bouw een geautomatiseerde Google Chrome Dino Game met Arduino
  8. DIY LED Roulette-spel – Bouw Eenpersoons Arcade Met Arduino Nano
  9. Arduino zakspelconsole bouwen met A-Maze: compacte, flashbare doolhofspel
  10. Bouw een betrouwbare Arduino-weerstation met DHT-sensoren
  11. Bouw een Klassieke Arduino LCD Arcade Game met Buzzer en Joystick