Índice:

Cyclone LED Arcade Game: 4 etapas
Cyclone LED Arcade Game: 4 etapas

Vídeo: Cyclone LED Arcade Game: 4 etapas

Vídeo: Cyclone LED Arcade Game: 4 etapas
Vídeo: Arduino Cyclone Arcade LED Chaser Game 2024, Setembro
Anonim
Image
Image
Instalar na luminária
Instalar na luminária

A intenção deste projeto era criar um jogo simples usando um Arduino que fosse interativo e divertido para as crianças. Lembro-me do jogo de arcade Cyclone ser um dos meus jogos de arcade favoritos quando eu era mais jovem, então decidi replicá-lo. Este é um projeto muito simples que consiste em um Arduino, string de LEDs endereçáveis individualmente e um botão de ação.

O objetivo do jogo é parar a luz de ciclismo quando atingir o LED (vermelho) indicado. Se for bem-sucedido, o nível de dificuldade aumentará. Se não tiver êxito, o ciclo de luz será reiniciado no nível de dificuldade atual.

Este instrutível foi um grande recurso para o núcleo da minha codificação.

Etapa 1: reunir suprimentos

  • Componentes principais:

    • Arduino (usei um UNO)
    • String de LEDs endereçáveis individualmente (usei o link)
    • Botão de pressão (usei o link)
    • Placa de circuito impresso (PCB) ou placa de ensaio
    • Fonte de alimentação (usei duas fontes de alimentação separadas, você pode usar uma se for criativo)

      • 5V 3A para LEDs
      • 9V 1A para Arduino
  • Estrutura:

    • Caixa de eletrônicos (modifiquei uma luminária de madeira da Goodwill)
    • Caixa de LED (modifiquei seu relógio de parede padrão e fiz furos usando os identificadores de minuto como marcações de orifícios. Use um relógio de madeira, se possível, para facilitar a perfuração.)
    • Caixa do botão (usei um tubo de PVC em cotovelo)
  • Ferramentas / outros materiais:

    • Fiação sobressalente para o seu circuito
    • Resistores de 10K (resistor pull-down para switch) e 470 ohm (para fio de dados em LEDs)
    • Perfure para criar orifícios para alojar seus LEDs e fazer todos os orifícios necessários em seu dispositivo para passar os fios
    • Ferro de soldar para soldar seu circuito a um PCB
    • Pistola de cola quente para prender os LEDs em sua luminária
    • Velcro ou algum meio de prender a estrutura junto
    • Gaxetas opcionais para orifícios feitos para os fios passarem

Etapa 2: Upload do código

Certifique-se de baixar e adicionar a biblioteca "FastLED"

O núcleo do código (void loop) consiste em dois estados: push button high (End Game) e push button low (Playing). Assim que o usuário pressiona o botão, o endereço do LED em que a luz foi interrompida é comparado ao endereço do LED central. Se não forem iguais, todas as luzes piscarão em vermelho duas vezes e o nível atual será reiniciado. Se forem iguais, cylon (script de biblioteca FastLED) é executado duas vezes, o nível de dificuldade aumenta e a reprodução é reiniciada. Assim que o jogador vence o último nível, cylon é executado oitavas vezes e o jogo é reiniciado no nível 1.

// Jogo Cyclone

#include "FastLED.h" // até 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 // Definição de níveis de dificuldade #define EASY 1 #define MÉDIO 2 #define HARD 3 #define ON_SPEED 4 #define SONIC_SPEED 5 #define ROCKET_SPEED 6 #define LIGHT_SPEED 7 #define MISSION_IMPOSSIBLE 8 // Dificuldade inicial na dificuldade = 1; // Definir o array de leds CRGB leds [NUM_LEDS]; // O jogador ganhou esta rodada? Esta tag é usada para parâmetros de dificuldade. bool wonThisRound = false; // Localização inicial da luz de ciclismo int LEDaddress = 0; // O jogo está funcionando? Bool Playing = true; // Esta é a primeira vitória? bool CycleEnded = true; // Detalhes do botão const int buttonPin = 9; int buttonState = 0; // Inicializa a biblioteca de led e funções de arduino void setup () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (BRIGHTNESS); pinMode (buttonPin, INPUT); Serial.begin (9600); } // A carne e as batatas // Dois modos - Jogando e finalizando o jogo void loop () {// FINALIZAR O JOGO buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; // O usuário pressionou o botão e o LED parou no endereço vencedor. para (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Preto; } leds [CENTER_LED] = CRGB:: Vermelho; leds [LEDaddress] = CRGB:: Verde; FastLED.show (); if (CycleEnded = true) {int diff = abs (CENTER_LED - LEDaddress); // Encontra a distância entre o led aceso e o led central if (diff == 0) {wonThisRound = true; // Jogador superou o nível com sucesso if (dificuldade! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} if (dificuldade == MISSION_IMPOSSIBLE) {for (int i = 0; i <8; i ++) {cylon (); } dificuldade = 0; } aumentar a dificuldade (); wonThisRound = false; } else {delay (1000); para (int i = 0; i <2; i ++) {flash (); }} CycleEnded = false; } LEDaddress = 0; atraso (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {Playing = true; }} // PLAYING if (Playing) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Desliga todos os leds} leds [CENTER_LED] = CRGB:: Red; // Define a cor do led central para leds verdes [LEDaddress] = CRGB:: Green; // Define a cor do led do cilindro para vermelho FastLED.show (); // Inicializa o ciclo de luz LEDaddress ++; // Define o ciclo de luz para um led por vez if (LEDaddress == NUM_LEDS) {LEDaddress = 0; } atraso (getTime (dificuldade)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; CycleEnded = true; }}} // Parâmetros de nível int getTime (int diff) // Retorna o atraso de tempo para o movimento do led com base na dificuldade {int timeValue = 0; switch (diff) {case EASY: timeValue = 100; pausa; case MEDIUM: timeValue = 80; pausa; case HARD: timeValue = 60; pausa; caso ON_SPEED: timeValue = 40; pausa; caso SONIC_SPEED: timeValue = 30; pausa; case ROCKET_SPEED: timeValue = 20; pausa; case LIGHT_SPEED: timeValue = 13; pausa; case MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Retorna a quantidade de atraso} // Parâmetros de aumento de dificuldade de vitória void boostDifficulty () {if (dificuldade! = MISSION_IMPOSSIBLE && wonThisRound) {dificuldade ++; }} // LED perdido Mostra void flash () {fill_solid (leds, NUM_LEDS, CRGB:: Vermelho); FastLED.show (); atraso (500); fill_solid (leds, NUM_LEDS, CRGB:: Black); FastLED.show (); atraso (500); } // Exibe LED ganho void fadeall () {for (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} void cylon () {static uint8_t hue = 0; Serial.print ("x"); // Primeiro deslize o led em uma direção para (int i = 0; i = 0; i--) {// Defina o i'ésimo led para leds vermelhos = CHSV (hue ++, 255, 255); // Mostra os leds FastLED.show (); // agora que mostramos os leds, redefina o i'ésimo led para preto // leds = CRGB:: Black; fadeall (); // Espere um pouco antes de fazermos um loop e fazer novamente delay (10); }}

Etapa 3: instalar no dispositivo de fixação

Instalar na luminária
Instalar na luminária
Instalar na luminária
Instalar na luminária

Não vou entrar em detalhes nesta seção. Existem milhares de maneiras diferentes de fazer essa parte e acho que você deve ser criativo para fazer com que pareça como você gosta. Dito isso, o relógio era muito conveniente para abrigar os LEDs, pois tinha indicadores de minutos que eu era capaz de usar como marcações de perfuração. Além disso, a tampa de vidro também me permite usar isso como uma mesa.

O velcro também foi muito útil para prender a luminária de LED na carcaça de componentes eletrônicos. Também usei velcro no Arduino. Isso tornou muito conveniente retirar o Arduino se eu quiser modificar o código.

Recomendado: