Table des matières:

Jeu d'arcade Cyclone LED : 4 étapes
Jeu d'arcade Cyclone LED : 4 étapes

Vidéo: Jeu d'arcade Cyclone LED : 4 étapes

Vidéo: Jeu d'arcade Cyclone LED : 4 étapes
Vidéo: TUTO BORNE D'ARCADE (4): COMMENT RACCORDER LE MONNAYEUR 2024, Septembre
Anonim
Image
Image
Installer dans le luminaire
Installer dans le luminaire

L'intention de ce projet était de créer un jeu simple utilisant un Arduino qui serait interactif et divertissant pour les enfants. Je me souviens que le jeu d'arcade Cyclone était l'un de mes jeux d'arcade préférés quand j'étais plus jeune, alors j'ai décidé de le reproduire. Il s'agit d'un projet très simple qui se compose d'un Arduino, d'une chaîne de LED adressables individuellement et d'un bouton-poussoir.

Le but du jeu est d'arrêter le feu de vélo lorsqu'il atteint la LED (rouge) indiquée. En cas de succès, le niveau de difficulté augmentera. En cas d'échec, le cycle lumineux redémarrera au niveau de difficulté actuel.

Cette instructable était une ressource énorme pour le noyau de mon codage.

Étape 1: Rassemblez les fournitures

  • Composants principaux:

    • Arduino (j'ai utilisé un UNO)
    • Chaîne de LED adressables individuellement (j'ai utilisé le lien)
    • Bouton poussoir (j'ai utilisé le lien)
    • Carte de circuit imprimé (PCB) ou maquette
    • Alimentation (j'ai utilisé deux alimentations séparées, vous pouvez vous en tirer avec une si vous êtes créatif)

      • 5V 3A pour LED
      • 9V 1A pour Arduino
  • Cadre:

    • Boîtier électronique (j'ai modifié un luminaire en bois de Goodwill)
    • Boîtier LED (j'ai modifié votre horloge murale standard et j'ai percé des trous en utilisant les identifiants des minutes comme marquage des trous. Utilisez une horloge en bois si possible pour faciliter le perçage.)
    • Boîtier de bouton (j'ai utilisé un tuyau en PVC coudé)
  • Outils / Autres matériaux:

    • Câblage de rechange pour votre circuit
    • Résistances 10K (résistance pull-down pour commutateur) et 470 ohms (pour fil de données sur LED)
    • Percez pour créer des trous pour loger vos LED et faire tous les trous nécessaires dans votre luminaire pour faire passer les fils
    • Fer à souder pour souder votre circuit à un PCB
    • Pistolet à colle chaude pour fixer les LED à votre luminaire
    • Velcro ou un moyen de fixer le cadre ensemble
    • Joints en option pour les trous percés pour le passage des fils

Étape 2: Télécharger le code

Assurez-vous de télécharger et d'ajouter la bibliothèque "FastLED"

Le noyau du code (boucle vide) se compose de deux états: bouton poussoir haut (End Game) et bouton poussoir bas (Playing). Une fois que l'utilisateur appuie sur le bouton, l'adresse de la LED sur laquelle la lumière a été arrêtée est comparée à l'adresse de la LED centrale. S'ils ne sont pas les mêmes, tous les voyants clignotent deux fois en rouge et le niveau en cours redémarre. S'ils sont identiques, cylon (script de la bibliothèque FastLED) s'exécute deux fois, le niveau de difficulté augmente et la lecture reprend. Une fois que le joueur a battu le dernier niveau, cylon s'exécute huitième fois et le jeu redémarre au niveau 1.

//Jeu Cyclone

#include "FastLED.h" //jusqu'à 50 #define NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #define COLOR_ORDER RGB //plage 0-64 #define BRIGHTNESS 50 //Définition des niveaux de difficulté #define FACILE 1 #define MEDIUM 2 #define HARD 3 #define ON_SPEED 4 #define SONIC_SPEED 5 #define ROCKET_SPEED 6 #define LIGHT_SPEED 7 #define MISSION_IMPOSSIBLE 8 //Début de difficulté int difficulté = 1; // Définit le tableau de leds CRGB leds[NUM_LEDS]; // Le joueur a-t-il gagné cette manche ? Cette balise est utilisée pour les paramètres de difficulté. bool wonThisRound = false; // Emplacement de départ de l'éclairage cyclable int LEDaddress = 0; // Le jeu fonctionne-t-il ? bool Lecture = vrai; // Est-ce la première victoire ? bool CycleEnded = vrai; // Détails du bouton const int buttonPin = 9; int buttonState = 0; // Initialiser la bibliothèque led et les fonctions arduino void setup() { FastLED.addLeds(leds, NUM_LEDS); FastLED.setBrightness(LUMINOSITÉ); pinMode(boutonPin, INPUT); Serial.begin(9600); } // La viande et les pommes de terre //Deux modes - Lecture et fin de partie void loop() { //END GAME buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { Playing = false; //L'utilisateur a appuyé sur le bouton et la LED s'est arrêtée sur l'adresse gagnante. for (int i = 0; i < NUM_LEDS; i++) { leds = CRGB::Black; } leds[CENTER_LED] = CRGB::Rouge; leds[LEDaddress] = CRGB::Vert; FastLED.show(); if (CycleEnded = true) { int diff = abs(CENTER_LED - LEDaddress); //Trouve la distance entre la led allumée et la led centrale if (diff == 0) { wonThisRound = true; //Le joueur a réussi à battre le niveau if (difficulté != MISSION_IMPOSSIBLE) { for (int i = 0; i < 2; i++) { cylon(); } } if (difficulté == MISSION_IMPOSSIBLE) { pour (int i = 0; i < 8; i++) { cylon(); } difficulté = 0; } augmenterDifficulté(); gagnéThisRound = false; } else { délai(1000); for (int i = 0; i < 2; i++) { flash(); } } CycleEnded = false; } LEDadresse = 0; retard (250); buttonState = digitalRead (boutonPin); if (buttonState == LOW) { Playing = true; } } // JOUER if(Jouer) { for (int i = 0; i < NUM_LEDS; i++) { leds = CRGB::Black; //Éteint toutes les leds } leds[CENTER_LED] = CRGB::Red; //Définit la couleur de la led centrale sur les leds vertes[LEDaddress] = CRGB::Green; // Définit la couleur de la led cyling sur rouge FastLED.show(); //Initialisation du cycle lumineux LEDaddress++; //Définit le cycle d'éclairage sur une LED à la fois if (LEDaddress == NUM_LEDS) { LEDaddress = 0; } delay(getTime(difficulté)); buttonState = digitalRead (boutonPin); if (buttonState == HIGH) { Playing = false; CycleEnd = vrai; } } } //Paramètres de niveau int getTime(int diff) // Retourne le délai pour le mouvement de la led en fonction de la difficulté { int timeValue = 0; switch (diff) { case EASY: timeValue = 100; Pause; cas MEDIUM: timeValue = 80; Pause; cas HARD: timeValue = 60; Pause; cas ON_SPEED: timeValue = 40; Pause; cas SONIC_SPEED: timeValue = 30; Pause; cas ROCKET_SPEED: timeValue = 20; Pause; cas LIGHT_SPEED: timeValue = 13; Pause; cas MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue;// Renvoie le montant du retard } //Paramètres d'augmentation de la difficulté gagnante void AugmentationDifficulté() { if (difficulté != MISSION_IMPOSSIBLE && wonThisRound) { difficulté++; } } //Lost LED Show void flash() { fill_solid(leds, NUM_LEDS, CRGB::Red); FastLED.show(); retard (500); fill_solid(leds, NUM_LEDS, CRGB::Black); FastLED.show(); retard (500); } //Won LED Show void fadeall() { for(int i = 0; i < NUM_LEDS; i++) { leds.nscale8(250); } } void cylon() { static uint8_t hue = 0; Serial.print("x"); // Faites d'abord glisser la led dans une direction for(int i = 0; i = 0; i--) { // Réglez la ième led sur leds rouges = CHSV(hue++, 255, 255); // Affiche les leds FastLED.show(); // maintenant que nous avons affiché les leds, réinitialisez la ième led au noir // leds = CRGB::Black; fadeall(); // Attendez un peu avant de boucler et de recommencer delay(10); } }

Étape 3: Installer dans le luminaire

Installer dans le luminaire
Installer dans le luminaire
Installer dans le luminaire
Installer dans le luminaire

Je ne vais pas entrer dans les détails dans cette section. Il y a mille façons différentes d'aborder cette partie et je pense que vous devriez être créatif pour que cela ressemble à ce que vous l'aimez. Cela étant dit, l'horloge était assez pratique à utiliser pour loger les LED car elle avait des indicateurs minuscules que j'ai pu utiliser comme repères de perçage. De plus, le couvercle en verre me permet également de l'utiliser comme table.

Le velcro était également très utile pour fixer le luminaire LED au luminaire du boîtier électronique. J'ai également utilisé du velcro sur l'Arduino. Cela l'a rendu très pratique pour retirer l'Arduino si jamais je veux modifier le code.

Conseillé: