Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Construa um Jogo LCD "Ninja Dollar" com Arduino UNO

Componentes e Materiais

ComponenteQuantidadeObservações
Arduino UNO1
LCD Padrão Adafruit 16x2 Branco no Azul1
Protoboard (genérica)2Usei duas por espaço; uma basta
Potenciômetro Mono 10k ohms1
LED (genérico)2
Resistor 1k ohm4
Chave Pushbutton 12mm SparkFun2
Buzzer Passivo RobotGeek1
Jumpers (genéricos)1

Ferramentas Necessárias

Sobre o Projeto

Jogo simples em LCD. Inspiração: jogo do Dinossauro do Chrome, com adições. O guerreiro "$" move-se constantemente, pula obstáculos ("#") e coleta estrelas ("*"). Pular obstáculo = 1 ponto; pegar estrela = 5 pontos. Pode atirar ("~") para remover obstáculos. LEDs indicam pulo/tiro. A cada 10, 20, 30 pontos, velocidade aumenta. 50 pontos = vitória. Colisão = game over. Limites ajustáveis no código. Buzzer toca sons de pulo/tiro e melodias de vitória/derrota. Meu primeiro projeto aqui – comentem!

Vídeo

(Vídeo demonstrativo no projeto original)

Conexões

O módulo LCD tem header macho 16 pinos na parte inferior. Encaixe na protoboard conforme imagem. Pinos (da esquerda para direita):

Conecte 5V do Arduino à trilha vermelha da protoboard; GND à trilha azul.

Outros pinos do potenciômetro → 5V e GND.

Buzzer piezo: se 3 pinos, S → pino 7, - → GND, outro → 5V. Se 2 pinos, um → GND, outro → pino 7.

Botões: primeiro (pulo) → pino 1; segundo (tiro) → pino 6. LEDs controlados apenas pelos botões (ânodo no pino do botão ligado ao Arduino, cátodo no GND).

Código

dollar_warrior (Arduino)
#include <LiquidCrystal.h>
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;
bool buttonState1 = 0;
bool buttonState2 = 0;
int randomNums[6];
int randomNum = 0;
int randomNums1[3];
int randomNum1 = 0;
unsigned int myDelay = 500;
bool temp = 0;
int tempI[16];
bool temp1 = 0;
int tempI1[3];
int button2IsPressed = 0;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  lcd.begin(16, 2);
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(buzzer, OUTPUT);
  lcd.setCursor(4, 0);
  lcd.print("THE GAME");
  lcd.setCursor(2, 1);
  lcd.print("STARTS IN ");
  lcd.print("5");
  delay(1000);
  lcd.setCursor(12, 1);
  lcd.print("4");
  delay(1000);
  lcd.setCursor(12, 1);
  lcd.print("3");
  delay(1000);
  lcd.setCursor(12, 1);
  lcd.print("2");
  delay(1000);
  lcd.setCursor(12, 1);
  lcd.print("1");
  delay(1000);
  lcd.clear();
}

void loop() {
  here:
  randomNum = random(5);
  for (int i = 0; i < randomNum; ++i) randomNums[i] = random(16);
  randomNum1 = random(3);
  for (int i = 0; i < randomNum1; ++i) randomNums1[i] = random(16);
  temp = 0;
  for (int j = 0; j < 3; ++j) tempI1[j] = 0;
  button2IsPressed = 0;
  for (int i = 0; i < 16; ++i) {
    if (pts > 9 && pts < 20) { lcd.setCursor(14, 0); myDelay = 400; }
    else if (pts > 19 && pts < 30) { lcd.setCursor(14, 0); myDelay = 300; }
    else if (pts > 29 && pts < 50) { myDelay = 200; lcd.setCursor(14, 0); }
    else if (pts >= 50) {
      pts = 0; myDelay = 500; lcd.clear();
      lcd.setCursor(5, 0); lcd.print("VICTORY");
      tone(buzzer, 262); delay(200);
      tone(buzzer, 330); delay(200);
      tone(buzzer, 392); delay(100);
      tone(buzzer, 330); delay(100);
      tone(buzzer, 392); delay(100);
      tone(buzzer, 523); delay(200);
      noTone(buzzer); delay(3000); lcd.clear(); goto here;
    }
    else lcd.setCursor(15, 0);
    lcd.print(pts);
    buttonState1 = digitalRead(buttonPin1);
    buttonState2 = digitalRead(buttonPin2);
    // Obstáculos
    if (!temp) {
      for (int j = 0; j < randomNum; ++j) {
        lcd.setCursor(randomNums[j], 1); lcd.print("#");
      }
    } else {
      for (int j = 0; j < randomNum; ++j) {
        if (tempI[0] > randomNums[j]) {
          lcd.setCursor(randomNums[j], 1); lcd.print("#");
        }
      }
    }
    // Estrelas
    if (!temp1) {
      for (int j = 0; j < randomNum1; ++j) {
        lcd.setCursor(randomNums1[j], 0); lcd.print("*");
      }
    } else {
      for (int j = 0; j < randomNum1; ++j) {
        if (randomNums1[j] != tempI1[j]) {
          lcd.setCursor(randomNums1[j], 0); lcd.print("*");
        }
      }
    }
    // Pulo
    if (buttonState1 == HIGH) {
      lcd.setCursor(i, 0);
      tone(buzzer, 131); delay(200); noTone(buzzer);
    } else lcd.setCursor(i, 1);
    lcd.print("$");
    // Tiro
    if (buttonState2 == HIGH) {
      tone(buzzer, 175); delay(100); noTone(buzzer);
      temp = 1;
      if (buttonState1 == LOW) tempI[button2IsPressed] = i;
      ++button2IsPressed;
      for (int k = i + 1; k < 16; ++k) {
        if (buttonState1 == LOW) lcd.setCursor(k, 1);
        else lcd.setCursor(k, 0);
        lcd.print("~"); delay(5);
        if (buttonState1 == LOW) lcd.setCursor(k - 1, 1);
        else lcd.setCursor(k - 1, 0);
        lcd.print(" "); delay(5);
      }
    }
    delay(myDelay);
    lcd.clear();
    // Coleta estrelas
    for (int j = 0; j < randomNum1; ++j) {
      if (i == randomNums1[j] && buttonState1 == HIGH) {
        temp1 = 1; tempI1[j] = i; pts += 5;
      }
    }
    // Colisão obstáculos
    for (int j = 0; j < randomNum; ++j) {
      if (i == randomNums[j] && buttonState1 == LOW && temp == 0) {
        pts = 0; myDelay = 500; lcd.clear();
        lcd.setCursor(6, 0); lcd.print("GAME");
        lcd.setCursor(6, 1); lcd.print("OVER");
        tone(buzzer, 349); delay(200);
        tone(buzzer, 277); delay(200);
        tone(buzzer, 220); delay(100);
        tone(buzzer, 277); delay(100);
        tone(buzzer, 220); delay(200);
        noTone(buzzer); delay(3000); lcd.clear(); goto here;
      }
      else if (i == randomNums[j] && buttonState1 == HIGH) ++pts;
    }
  }
}

Esquemáticos

Arquivo Fritzing: game_aUIjA6VZxX.fzz

Construa um Jogo LCD  Ninja Dollar  com Arduino UNO

Processo de manufatura

  1. Xadrez: Das Origens Antigas à Fabricação Moderna — Visão de Especialista
  2. Pinball: História, Design e Fabricação de um Clássico dos Fliperamas
  3. A Evolução e Artesanato do Futebol Americano: De Jogos Antigos aos Padrões Modernos da NFL
  4. Construa um Jogo em Tempo Real com Giroscópio: Arduino Nano + Sensor MPU-6050
  5. Construa Seu Próprio Jogo de Roleta com 37 LEDs e Arduino Nano
  6. Relógio 3D RGB Arduclock – Bluetooth, LEDs Endereçáveis e RTC
  7. Monitor de Saúde de Rios: Sistema de Qualidade da Água Baseado em Arduino
  8. Jogo Interativo com Joystick e Arduino – Feedback com LEDs
  9. Find Me: Localizador Inteligente de Objetos com Arduino e Bluetooth
  10. Osciloscópio DIY com Arduino Nano (10 Hz–50 kHz) e LCD 128×64