Taula de continguts:

Cyclone LED Arcade Game: 4 passos
Cyclone LED Arcade Game: 4 passos

Vídeo: Cyclone LED Arcade Game: 4 passos

Vídeo: Cyclone LED Arcade Game: 4 passos
Vídeo: Arduino Cyclone Arcade LED Chaser Game 2024, Desembre
Anonim
Image
Image
Instal·leu a Fixture
Instal·leu a Fixture

La intenció d’aquest projecte era crear un joc senzill amb un Arduino que fos interactiu i entretingut per als nens. Recordo que el joc arcade Cyclone era un dels meus jocs d’arcade preferits quan era més jove, així que vaig decidir replicar-lo. Es tracta d’un projecte molt senzill que consisteix en un Arduino, una cadena de LED adreçables individualment i un polsador.

L’objectiu del joc és aturar la llum de ciclisme quan arriba al LED (vermell) indicat. Si té èxit, el nivell de dificultat augmentarà. Si no té èxit, el cicle de llum es reiniciarà al nivell de dificultat actual.

Aquesta instrucció va ser un recurs enorme per al nucli de la meva codificació.

Pas 1: reuniu subministraments

  • Components principals:

    • Arduino (he utilitzat un UNO)
    • Cadena de LED adreçables individualment (he utilitzat enllaç)
    • Polsador (he utilitzat l'enllaç)
    • Placa de circuits impresos (PCB) o taulers de suport
    • Font d'alimentació (he utilitzat dues fonts d'alimentació separades; pot ser que se'n surti una si es creatiu)

      • 5V 3A per a LEDs
      • 9V 1A per Arduino
  • Marc:

    • Carcassa electrònica (he modificat un llum de fusta de Goodwill)
    • Carcassa LED (he modificat el rellotge de paret estàndard i he fet forats utilitzant els identificadors de minuts com a marques de forats. Utilitzeu un rellotge de fusta si és possible per facilitar la perforació).
    • Carcassa de botons (he utilitzat un tub de colze de PVC)
  • Eines / Altres materials:

    • Cablatge de recanvi per al vostre circuit
    • Resistències de 10K (resistència desplegable per commutador) i 470 ohm (per cable de dades en LED)
    • Trepant per crear forats per allotjar els vostres LEDs i fer els forats necessaris al vostre dispositiu per fer passar els cables
    • Soldador per soldar el vostre circuit a un PCB
    • Pistola de cola calenta per fixar els LED al vostre dispositiu
    • Velcro o algun mitjà per assegurar el marc junts
    • Juntes opcionals per a forats foradats perquè passin cables

Pas 2: pengeu el codi

Assegureu-vos de descarregar i afegir la biblioteca "FastLED"

El nucli del codi (bucle buit) consta de dos estats: polsador alt (Finalitzar joc) i polsador baix (Jugant). Un cop l’usuari prem el botó, es compara l’adreça LED en què es va parar la llum amb l’adreça del LED central. Si no són el mateix, tots els llums parpellaran en vermell dues vegades i es reiniciarà el nivell actual. Si són iguals, cylon (script de biblioteca FastLED) s'executa dues vegades, el nivell de dificultat augmenta i la reproducció es reprèn. Un cop el jugador supera l’últim nivell, cylon corre vuitena vegada i el joc es reinicia al nivell 1.

// Joc de ciclons

#include "FastLED.h" // fins a 50 #define NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #define COLOR_ORDER RGB // range 0-64 #define BRIGHTNESS 50 // Definició dels nivells de dificultat #define EASY 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 // Dificultat inicial int difficult = 1; // Definiu la matriu de leds leds CRGB [NUM_LEDS]; // Ha guanyat el jugador aquesta ronda? Aquesta etiqueta s’utilitza per a paràmetres de dificultat. bool wonThisRound = false; // Lloc inicial de la llum de bicicleta int LEDaddress = 0; // El joc s'està executant? bool Jugant = cert; // És la primera victòria? bool CycleEnded = cert; // Detalls del botó const int buttonPin = 9; int buttonState = 0; // Inicialitzeu la biblioteca de leds i les funcions arduino void setup () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (BRIGHTNESS); pinMode (buttonPin, INPUT); Serial.begin (9600); } // The meat and potatoes // Two Modes: Playing and End Game void loop () {// END GAME buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Jugant = fals; // L'usuari ha premut el botó i el LED s'ha aturat a l'adreça guanyadora. for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Negre; } leds [CENTRE_LED] = CRGB:: Vermell; leds [LEDaddress] = CRGB:: Verd; FastLED.show (); if (CycleEnded = true) {int diff = abs (CENTRE_LED - adreça LED); // Cerca la distància entre el led il·luminat i el led central si (diff == 0) {wonThisRound = true; // El jugador supera amb èxit el nivell if (dificultat! = MISSIÓ_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} if (dificultat == MISSIÓ_IMPOSSIBLE) {per (int i = 0; i <8; i ++) {cylon (); } dificultat = 0; } augmentarDificultat (); wonThisRound = false; } else {delay (1000); for (int i = 0; i <2; i ++) {flash (); }} CycleEnded = false; } LEDaddress = 0; retard (250); buttonState = digitalRead (buttonPin); if (buttonState == BAIX) {Jugant = true; }} // PLAYING if (Playing) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Apaga tots els leds} leds [CENTRE_LED] = CRGB:: Vermell; // Estableix el color del led central en leds verds [LEDaddress] = CRGB:: Green; // Estableix el color del led cilindre en vermell FastLED.show (); // Inicialitza l'adreça LED del cicle de llum ++; // Estableix el cicle de llum a un led alhora si (LEDaddress == NUM_LEDS) {LEDaddress = 0; } delay (getTime (dificultat)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Jugant = fals; CycleEnded = cert; }}} // Paràmetres de nivell int getTime (int diff) // Retorna el temps de retard del moviment del led en base a dificultat {int timeValue = 0; commutador (diferència) {cas FÀCIL: TimeValue = 100; trencar; cas MITJÀ: valorValor = 80; trencar; cas DUR: valorValor = 60; trencar; cas ON_SPEED: timeValue = 40; trencar; cas SONIC_SPEED: timeValue = 30; trencar; cas ROCKET_SPEED: timeValue = 20; trencar; majúscula LIGHT_SPEED: timeValue = 13; trencar; cas MISSIÓ_IMPOSSIBLE: valorValor = 7; } retornar el tempsValor; // Retornar la quantitat de retard} // Guanyar dificultat augmentar paràmetres void augmentar Dificultat () {si (dificultat! = MISSIÓ_IMPOSSIBLE && wonThisRound) {dificultat ++; }} // Lost LED Show void flash () {fill_solid (leds, NUM_LEDS, CRGB:: Red); FastLED.show (); retard (500); fill_solid (leds, NUM_LEDS, CRGB:: Negre); 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 tonalitat = 0; Serial.print ("x"); // Primer feu lliscar el led en una direcció per (int i = 0; i = 0; i--) {// Establiu el led i'th a leds vermells = CHSV (tonalitat ++, 255, 255); // Mostra els leds FastLED.show (); // ara que hem mostrat els leds, restableix el led i'th a negre // leds = CRGB:: Black; fadeall (); // Espereu una mica abans de fer una volta i fer-ho de nou endarreriu (10); }}

Pas 3: instal·leu a Fixture

Instal·leu a Fixture
Instal·leu a Fixture
Instal·leu a Fixture
Instal·leu a Fixture

No entraré en detalls en aquesta secció. Hi ha mil maneres diferents d’aconseguir aquesta part i crec que hauríeu de ser creatius per fer que sembli com us agrada. Dit això, el rellotge era bastant còmode d’utilitzar per allotjar els LED, ja que tenia indicadors de minuts que era capaç d’utilitzar com a marques de perforació. A més, la coberta de vidre també em permet utilitzar-lo com a taula.

El velcro també va ser molt útil per fixar el dispositiu LED al dispositiu electrònic de la carcassa. També vaig fer servir velcro a l’Arduino. Això va fer que sigui molt convenient treure l'Arduino si mai vull modificar el codi.

Recomanat: