Índice:
Vídeo: Cyclone LED Arcade Game: 4 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
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
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:
FPGA Cyclone IV DueProLogic controla a câmera Raspberry Pi: 5 etapas
FPGA Cyclone IV DueProLogic Controla Câmera Raspberry Pi: Apesar do FPGA DueProLogic ser oficialmente projetado para Arduino, vamos tornar o FPGA e o Raspberry Pi 4B comunicáveis. Três tarefas são implementadas neste tutorial: (A) Pressione simultaneamente os dois botões em FPGA para inverter o ângulo de
FPGA Cyclone IV DueProLogic - Botão e LED: 5 etapas
FPGA Cyclone IV DueProLogic - Botão e LED: Neste tutorial, vamos usar o FPGA para controlar o circuito de LED externo. Vamos implementar as seguintes tarefas (A) Use os botões de pressão no FPGA Cyclone IV DuePrologic para controlar o LED. (B) Flash LED no & desligado periodicamenteLaboratório de demonstração de vídeo
Cyclone (Arduino LED Game): 6 etapas (com imagens)
Cyclone (Arduino LED Game): Neste tutorial, vou ensiná-lo a criar um jogo de LED com muito pouco código ou experiência! Tive essa ideia por um tempo e finalmente comecei a criá-la. É um jogo divertido que nos lembra a todos os jogos de arcade. Existem outros tutoriais para
Arduino Cyclone Arcade Game: 6 etapas
Arduino Cyclone Arcade Game: Luzes piscantes! Arduino! Jogo! O que mais precisa ser dito? Este jogo é baseado no jogo de arcade Cyclone, onde o jogador tenta parar um led que rola ao redor de um círculo em um local específico
Arduino LED Laser Arcade Game: 3 etapas (com imagens)
Arduino LED Laser Arcade Game: Neste instrutivo, demonstrarei como fazer um Laser Arcade Game usando LED e sensores de luz. O código está incluído e você não precisa de muitas partes para construí-lo. Eu não vou te dizer como eu construo o caso, você vai ter que fazer isso sozinho