Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Créez un jeu LCD « Ninja Dollar » avec Arduino UNO

Composants et fournitures

Arduino UNO 1
Écran LCD 16×2 (blanc sur bleu, ex. Adafruit) 1
Plaque d'essai (breadboard) 2 (ou 1 grande)
Potentiomètre 10 kΩ (réglage contraste) 1
LED (générique) 2
Résistance 1 kΩ 4
Bouton poussoir 12 mm 2
Buzzer piézo (passif) 1
Fils de connexion 1 jeu

Outils nécessaires

À propos de ce projet

Ce jeu LCD simple s'inspire du jeu du dinosaure de Google Chrome, avec des ajouts : le guerrier « $ » avance en permanence, peut sauter par-dessus les obstacles (#), attraper des étoiles (*) pour 5 points, et tirer (~) pour détruire les obstacles. Des LED indiquent l'action (saut/tir). Un buzzer émet des sons pour chaque action et des mélodies pour victoire/défaite. La vitesse augmente tous les 10 points. À 50 points, vous gagnez. Toucher un obstacle = game over. Tous les paramètres sont modifiables dans le code.

Connexions

Le module LCD a un connecteur mâle 16 broches. Insérez-le sur la breadboard. Broches (de gauche à droite) :

Reliez 5V et GND de l'Arduino aux rails d'alimentation de la breadboard. Connectez le potentiomètre : broche centrale sur V0 du LCD, les deux autres sur 5V et GND.

Buzzer : Si 3 broches : S sur pin 7, – sur GND, l'autre sur 5V. Si 2 broches : une sur GND, l'autre sur pin 7.

Boutons : Bouton saut (pin 1), bouton tir (pin 6). Les LED sont commandées directement par les boutons (anode sur broche bouton-Arduino, cathode sur GND).

Code

dollar_warrior (Arduino)

#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
const int buttonPin1 = 1; // saut
const int buttonPin2 = 6; // tir
const int buzzer = 7;

unsigned long pts = 0;
bool buttonState1 = 0, buttonState2 = 0;
int randomNums[6], randomNum = 0;
int randomNums1[3], 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 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) {
    // Affichage score & vitesse
    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) { lcd.setCursor(14, 0); myDelay = 200; }
    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);

    // Obstacles
    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("#");
        }
      }
    }

    // Étoiles (points bonus)
    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("*");
        }
      }
    }

    // Saut
    if (buttonState1 == HIGH) {
      lcd.setCursor(i, 0);
      tone(buzzer, 131); delay(200); noTone(buzzer);
    } else {
      lcd.setCursor(i, 1);
    }
    lcd.print("$");

    // Tir
    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();

    // Capture étoile
    for (int j = 0; j < randomNum1; ++j) {
      if (i == randomNums1[j] && buttonState1 == HIGH) {
        temp1 = 1; tempI1[j] = i; pts += 5;
      }
    }

    // Collision obstacle
    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; // obstacle franchi
    }
  }
}

Schémas

Schéma Fritzing disponible dans le projet original (fichier game_aUIjA6VZxX.fzz).

Processus de fabrication

  1. Les Échecs : Des Origines Anciennes à la Fabrication Moderne — Vue d'Expert
  2. Flipper : histoire, conception et fabrication d'un jeu d'arcade classique
  3. L'Évolution et l'Artisanat du Football Américain : Des Jeux Anciens aux Standards Modernes de la NFL
  4. Construire un jeu gyroscopique temps réel avec Arduino Nano et capteur MPU-6050
  5. Créer votre propre jeu de roulette à 37 LED avec Arduino Nano
  6. Horloge 3D RGB Arduclock – Montre LED Bluetooth avec horloge temps réel
  7. Surveillance de la Qualité de l'Eau : Système Arduino MKR1000 pour Rivières et Lacs
  8. Jeu interactif joystick + LEDs avec Arduino
  9. Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth