Sommario:

Cyclone LED Arcade Game: 4 passaggi
Cyclone LED Arcade Game: 4 passaggi

Video: Cyclone LED Arcade Game: 4 passaggi

Video: Cyclone LED Arcade Game: 4 passaggi
Video: Big Articulated Streamer to mimic rainbow TROUT - McFly Angler Streamer Fly Tying Tutorials 2024, Settembre
Anonim
Image
Image
Installa nel dispositivo
Installa nel dispositivo

L'intento di questo progetto era creare un semplice gioco utilizzando un Arduino che fosse interattivo e divertente per i bambini. Ricordo che il gioco arcade Cyclone era uno dei miei giochi arcade preferiti quando ero più giovane, quindi ho deciso di replicarlo. Questo è un progetto molto semplice che consiste in un Arduino, una stringa di LED indirizzabili individualmente e un pulsante.

L'obiettivo del gioco è fermare la luce del ciclismo quando raggiunge il LED (rosso) indicato. In caso di successo, il livello di difficoltà aumenterà. In caso di esito negativo, il ciclo di luci ricomincerà al livello di difficoltà attuale.

Questo istruibile è stato un'enorme risorsa per il nucleo della mia codifica.

Passaggio 1: raccogliere i rifornimenti

  • Componenti principali:

    • Arduino (ho usato un UNO)
    • Stringa di LED indirizzabili individualmente (ho usato il link)
    • Pulsante (ho usato il link)
    • Circuito stampato (PCB) o breadboard
    • Alimentatore (ho usato due alimentatori separati, potresti farla franca se sei creativo)

      • 5V 3A per LED
      • 9V 1A per Arduino
  • Struttura:

    • Alloggiamento dell'elettronica (ho modificato un portalampada in legno di Goodwill)
    • Alloggiamento LED (Ho modificato il tuo orologio da parete standard e ho praticato dei fori utilizzando gli identificatori dei minuti come segni di foratura. Se possibile, usa un orologio di legno per facilitare la perforazione.)
    • Alloggiamento pulsanti (ho usato un tubo in PVC a gomito)
  • Strumenti/Altri materiali:

    • Cablaggio di ricambio per il tuo circuito
    • Resistori da 10K (resistenza pull-down per interruttore) e 470 ohm (per cavo dati su LED)
    • Trapano per creare fori per alloggiare i tuoi LED e fare tutti i fori necessari nel tuo apparecchio per far passare i cavi
    • Saldatore per saldare il circuito a un PCB
    • Pistola per colla a caldo per fissare i LED al tuo apparecchio
    • Velcro o qualche mezzo per fissare insieme la struttura
    • Guarnizioni opzionali per i fori praticati per il passaggio dei cavi

Passaggio 2: carica il codice

Assicurati di scaricare e aggiungere la libreria "FastLED"

Il nucleo del codice (loop void) è costituito da due stati: pulsante alto (Fine gioco) e pulsante basso (Riproduzione). Una volta che l'utente preme il pulsante, l'indirizzo del LED su cui è stata spenta la luce viene confrontato con l'indirizzo del LED centrale. Se non sono uguali, tutte le spie lampeggiano in rosso due volte e il livello corrente si riavvia. Se sono uguali, cylon (script della libreria FastLED) viene eseguito due volte, il livello di difficoltà aumenta e il gioco riprende. Una volta che il giocatore ha superato l'ultimo livello, cylon viene eseguito otto volte e il gioco ricomincia dal livello 1.

//Gioco del ciclone

#include "FastLED.h" //fino 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 //Definizione dei livelli di difficoltà #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 //Difficoltà iniziale int difficoltà = 1; // Definisce l'array di led CRGB leds[NUM_LEDS]; // Il giocatore ha vinto questo round? Questo tag viene utilizzato per i parametri di difficoltà. bool wonThisRound = false; // Posizione di partenza del semaforo int LEDaddress = 0; // Il gioco è in esecuzione? bool Riproduzione = vero; // È questa la prima vittoria? bool CycleEnded = vero; // Dettagli del pulsante const int buttonPin = 9; int buttonState = 0; // Inizializza la libreria led e le funzioni arduino void setup() { FastLED.addLeds(leds, NUM_LEDS); FastLED.setBrightness(LUMINOSITÀ); pinMode(pulsantePin, INPUT); Serial.begin(9600); } // La carne e le patate //Due modalità: riproduzione e fine del gioco void loop() { //FINE GIOCO buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { Riproduzione = false; //L'utente ha premuto il pulsante e il LED si è fermato sull'indirizzo vincente. for (int i = 0; i < NUM_LEDS; i++) { led = CRGB::Nero; } led[CENTER_LED] = CRGB::Rosso; leds[LEDaddress] = CRGB::Green; FastLED.show(); if (CycleEnded = true) { int diff = abs(CENTER_LED - LEDaddress); //Trova la distanza tra il led acceso e il led centrale if (diff == 0) { wonThisRound = true; //Il giocatore ha superato con successo il livello if (difficoltà != MISSION_IMPOSSIBLE) { for (int i = 0; i < 2; i++) { cylon(); } } if (difficoltà == MISSION_IMPOSSIBLE) { for (int i = 0; i < 8; i++) { cylon(); } difficoltà = 0; } aumentaDifficoltà(); wonThisRound = false; } else { ritardo(1000); for (int i = 0; i < 2; i++) { flash(); } } CycleEnded = false; } LEDaddress = 0; ritardo(250); buttonState = digitalRead(buttonPin); if (buttonState == LOW) { Riproduzione = true; } } // RIPRODUZIONE if(Riproduzione) { for (int i = 0; i < NUM_LEDS; i++) { leds = CRGB::Black; //Spegne tutti i led } leds[CENTER_LED] = CRGB::Red; //Imposta il colore del led centrale su leds verdi[LEDaddress] = CRGB::Green; //Imposta il colore del led sul rosso FastLED.show(); //Inizializza il ciclo di luce LEDaddress++; // Imposta il ciclo di luce su un led alla volta if (LEDaddress == NUM_LEDS) { LEDaddress = 0; } delay(getTime(difficoltà)); buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { Riproduzione = false; CycleEnded = vero; } } } //Parametri di livello int getTime(int diff) // Restituisce il tempo di ritardo per il movimento del led in base alla difficoltà { int timeValue = 0; switch (diff) { case EASY: timeValue = 100; rottura; caso MEDIO: timeValue = 80; rottura; caso HARD: timeValue = 60; rottura; caso ON_SPEED: timeValue = 40; rottura; caso SONIC_SPEED: timeValue = 30; rottura; caso ROCKET_SPEED: timeValue = 20; rottura; caso LIGHT_SPEED: timeValue = 13; rottura; caso MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue;// Restituisci l'importo del ritardo } //Parametri per aumentare la difficoltà di vincita void aumentareDifficoltà() { if (difficoltà != MISSION_IMPOSSIBLE && wonThisRound) { difficoltà++; } } // LED perso Mostra void flash() { fill_solid(leds, NUM_LEDS, CRGB::Red); FastLED.show(); ritardo (500); fill_solid(leds, NUM_LEDS, CRGB::Nero); FastLED.show(); ritardo (500); } // LED vinto Mostra void fadeall() { for(int i = 0; i < NUM_LEDS; i++) { leds.nscale8(250); } } void cylon() { statico uint8_t hue = 0; Serial.print("x"); // Per prima cosa fai scorrere il led in una direzione for(int i = 0; i = 0; i--) { // Imposta l'i-esimo led su led rossi = CHSV(hue++, 255, 255); // Mostra i led FastLED.show(); // ora che abbiamo mostrato i led, resetta l'i-esimo led al nero // leds = CRGB::Black; dissolvenza(); // Aspetta un po' prima di fare un giro e farlo di nuovo delay(10); } }

Passaggio 3: installa in Fixture

Installa nel dispositivo
Installa nel dispositivo
Installa nel dispositivo
Installa nel dispositivo

Non entrerò nei dettagli in questa sezione. Ci sono mille modi diversi per affrontare questa parte e penso che dovresti essere creativo per farlo sembrare come ti piace. Detto questo, l'orologio era abbastanza comodo da usare per alloggiare i LED in quanto aveva indicatori di minuti che potevo usare come segni di trapano. Inoltre, la copertura in vetro mi consente di usarlo anche come tavolo.

Il velcro è stato molto utile anche per fissare l'apparecchio LED all'alloggiamento dell'elettronica. Ho anche usato il velcro su Arduino. Ciò ha reso molto conveniente estrarre l'Arduino se volessi modificare il codice.

Consigliato: