Tabla de contenido:

Cyclone LED Arcade Game: 4 pasos
Cyclone LED Arcade Game: 4 pasos

Video: Cyclone LED Arcade Game: 4 pasos

Video: Cyclone LED Arcade Game: 4 pasos
Video: Mini Cyclone Game on WS2812 LED Ring and Arduino Nano 2024, Septiembre
Anonim
Image
Image
Instalar en accesorio
Instalar en accesorio

La intención de este proyecto era crear un juego simple usando un Arduino que fuera interactivo y entretenido para los niños. Recuerdo que el juego de arcade Cyclone era uno de mis juegos de arcade favoritos cuando era más joven, así que decidí replicarlo. Este es un proyecto muy simple que consta de un Arduino, una cadena de LED direccionables individualmente y un botón pulsador.

El objetivo del juego es detener la luz de ciclismo cuando alcanza el LED (rojo) indicado. Si tiene éxito, el nivel de dificultad aumentará. Si no tiene éxito, el ciclo de luz se reiniciará en el nivel de dificultad actual.

Este instructable fue un gran recurso para el núcleo de mi codificación.

Paso 1: Reúna los suministros

  • Componentes principales:

    • Arduino (usé un UNO)
    • Cadena de LED direccionables individualmente (utilicé enlace)
    • Botón pulsador (utilicé enlace)
    • Placa de circuito impreso (PCB) o protoboard
    • Fuente de alimentación (utilicé dos fuentes de alimentación separadas, puede salirse con una si es creativo)

      • 5V 3A para LED
      • 9V 1A para Arduino
  • Estructura:

    • Carcasa de la electrónica (modifiqué una lámpara de madera de Goodwill)
    • Carcasa de LED (modifiqué su reloj de pared estándar y perforé orificios usando los identificadores de minutos como marcas de orificios. Use un reloj de madera si es posible para facilitar la perforación).
    • Carcasa del botón (utilicé un tubo de PVC acodado)
  • Herramientas / Otros materiales:

    • Cableado de repuesto para su circuito
    • Resistencias de 10K (resistencia desplegable para interruptor) y 470 ohmios (para cable de datos en LED)
    • Taladre para crear agujeros para albergar sus LED y haga los agujeros necesarios en su accesorio para pasar los cables a través
    • Soldador para soldar su circuito a una PCB
    • Pistola de pegamento caliente para fijar los LED a su dispositivo
    • Velcro o algún medio para asegurar el marco juntos
    • Juntas opcionales para orificios perforados para que pasen los cables

Paso 2: Cargar código

Asegúrese de descargar y agregar la biblioteca "FastLED"

El núcleo del código (bucle vacío) consta de dos estados: botón pulsador alto (Finalizar juego) y botón pulsador bajo (Reproducción). Una vez que el usuario presiona el botón, la dirección del LED en la que se detuvo la luz se compara con la dirección del LED central. Si no son iguales, todas las luces parpadean en rojo dos veces y se reinicia el nivel actual. Si son iguales, cylon (secuencia de comandos de la biblioteca FastLED) se ejecuta dos veces, aumenta el nivel de dificultad y se reanuda la reproducción. Una vez que el jugador supera el último nivel, cylon corre octava vez y el juego se reinicia en el nivel 1.

// Juego de ciclón

#include "FastLED.h" // hasta 50 #define NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #define COLOR_ORDER RGB // rango 0-64 #define BRIGHTNESS 50 // Definición de niveles de dificultad #define FÁCIL 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 // Dificultad inicial int dificultad = 1; // Definir la matriz de leds leds CRGB [NUM_LEDS]; // ¿El jugador ganó esta ronda? Esta etiqueta se utiliza para parámetros de dificultad. bool wonThisRound = falso; // Ubicación inicial de la luz cíclica int LEDaddress = 0; // ¿Se está ejecutando el juego? bool Playing = true; // ¿Es esta la primera victoria? bool CycleEnded = verdadero; // Detalles del botón const int buttonPin = 9; int buttonState = 0; // Inicializar la biblioteca de led y las funciones de arduino void setup () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (BRILLO); pinMode (buttonPin, INPUT); Serial.begin (9600); } // La carne y las patatas // Dos modos: jugar y finalizar el juego void loop () {// FIN DEL JUEGO buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Reproduciendo = falso; // El usuario ha pulsado el botón y el LED se ha detenido en la dirección ganadora. para (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Negro; } leds [CENTER_LED] = CRGB:: Rojo; leds [dirección LED] = CRGB:: Verde; FastLED.show (); if (CycleEnded = true) {int diff = abs (CENTER_LED - LEDaddress); // Encuentra la distancia entre el led encendido y el led central if (diff == 0) {wonThisRound = true; // El jugador supera con éxito el nivel if (dificultad! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} if (dificultad == MISSION_IMPOSSIBLE) {for (int i = 0; i <8; i ++) {cylon (); } dificultad = 0; } aumentarDificultad (); wonThisRound = falso; } else {retraso (1000); para (int i = 0; i <2; i ++) {flash (); }} CycleEnded = falso; } LEDaddress = 0; retraso (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {Playing = true; }} // JUGANDO if (Reproducción) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Apaga todos los leds} leds [CENTER_LED] = CRGB:: Red; // Establece el color del led central en leds verdes [LEDaddress] = CRGB:: Green; // Establece el color del LED de ciclo en rojo FastLED.show (); // Inicializa el ciclo de luz LEDaddress ++; // Establece el ciclo de luz en un LED a la vez if (LEDaddress == NUM_LEDS) {LEDaddress = 0; } retraso (getTime (dificultad)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Reproduciendo = falso; CycleEnded = verdadero; }}} // Parámetros de nivel int getTime (int diff) // Devuelve el retardo de tiempo para el movimiento del led en base a la dificultad {int timeValue = 0; switch (diff) {case EASY: timeValue = 100; rotura; caso MEDIO: timeValue = 80; rotura; caso DIFÍCIL: timeValue = 60; rotura; case ON_SPEED: timeValue = 40; rotura; case SONIC_SPEED: timeValue = 30; rotura; case ROCKET_SPEED: timeValue = 20; rotura; case LIGHT_SPEED: timeValue = 13; rotura; case MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Devuelve la cantidad de retraso} // La dificultad ganadora aumenta los parámetros void Incrementa la dificultad () {if (dificultad! = MISSION_IMPOSSIBLE && wonThisRound) {dificultad ++; }} // LED perdido Mostrar flash vacío () {fill_solid (leds, NUM_LEDS, CRGB:: Red); FastLED.show (); retraso (500); fill_solid (leds, NUM_LEDS, CRGB:: Negro); FastLED.show (); retraso (500); } // Ganó 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"); // Primero deslice el led en una dirección para (int i = 0; i = 0; i--) {// Establezca el i'th led en leds rojos = CHSV (hue ++, 255, 255); // Muestra los leds FastLED.show (); // ahora que hemos mostrado los leds, resetee el i'th led a negro // leds = CRGB:: Black; fadeall (); // Espera un poco antes de hacer un bucle y hacerlo de nuevo delay (10); }}

Paso 3: instalar en el accesorio

Instalar en accesorio
Instalar en accesorio
Instalar en accesorio
Instalar en accesorio

No voy a entrar en detalles en esta sección. Hay mil formas diferentes de abordar esta parte y creo que debes ser creativo para que se vea como te gusta. Dicho esto, el reloj fue bastante conveniente de usar para albergar los LED, ya que tenía indicadores de minutos que pude usar como marcas de perforación. Además, la cubierta de vidrio también me permite usar esto como mesa.

El velcro también fue muy útil para asegurar el dispositivo LED al dispositivo de la carcasa de la electrónica. También usé velcro en el Arduino. Esto lo hizo muy conveniente para sacar el Arduino si alguna vez quiero modificar el código.

Recomendado: