INHOUDSOPGAWE:

Sikloon LED Arcade Game: 4 stappe
Sikloon LED Arcade Game: 4 stappe

Video: Sikloon LED Arcade Game: 4 stappe

Video: Sikloon LED Arcade Game: 4 stappe
Video: Работа с крупноформатной плиткой. Оборудование. Бесшовная укладка. Клей. 2024, September
Anonim
Image
Image
Installeer in toebehore
Installeer in toebehore

Die bedoeling van hierdie projek was om 'n eenvoudige speletjie te skep met 'n Arduino wat interaktief en vermaaklik vir kinders sou wees. Ek onthou dat die Cyclone arcade game een van my gunsteling arcade games was toe ek jonger was, so ek het besluit om dit te herhaal. Dit is 'n baie eenvoudige projek wat bestaan uit 'n Arduino, 'n reeks individueel aanspreekbare LED's en 'n drukknop.

Die doel van die spel is om die fietslig te stop wanneer dit die aangeduide (rooi) LED bereik. As dit suksesvol is, sal die moeilikheidsgraad toeneem. As dit nie slaag nie, begin die ligsiklus weer op die huidige moeilikheidsgraad.

Hierdie instruksies was 'n groot bron vir die kern van my kodering.

Stap 1: Versamel voorraad

  • Hoofkomponente:

    • Arduino (ek het 'n UNO gebruik)
    • String van individueel aanspreekbare LED's (ek het skakel gebruik)
    • Drukknoppie (ek gebruik skakel)
    • Gedrukte kringbord (PCB) of broodbord
    • Kragtoevoer (ek het twee afsonderlike kragtoevoer gebruik; u kan met een wegkom as u kreatief is)

      • 5V 3A vir LED's
      • 9V 1A vir Arduino
  • Raamwerk:

    • Elektroniese behuising (ek het 'n houtlamp van Goodwill verander)
    • LED -behuising (ek het u standaard muurhorlosie en gate geboor met behulp van die minuut -identifiseerders as gatmerke. Gebruik 'n houtklok indien moontlik om die boorwerk makliker te maak.)
    • Knopbehuizing (ek het 'n elmboog -PVC -pyp gebruik)
  • Gereedskap / ander materiale:

    • Reserve bedrading vir u kring
    • 10K (aftrekweerstand vir skakelaar) en 470 ohm (vir datadraad op LED's) weerstande
    • Boor om gate te skep om u LED's te huisves en om die nodige gate in u armatuur te maak om drade deur te voer
    • Soldeerbout om u stroombaan aan 'n PCB te soldeer
    • Warm lijmpistool om die LED's aan u armatuur vas te maak
    • Klittenband of 'n manier om die raamwerk saam te beveilig
    • Pakkies is opsioneel vir gate wat geboor is om drade deur te laat

Stap 2: Laai kode op

Maak seker dat u die "FastLED" -biblioteek aflaai en byvoeg

Die kern van die kode (leemte -lus) bestaan uit twee toestande: drukknop hoog (eindspel) en drukknop laag (speel). Sodra die gebruiker op die knoppie druk, word die LED -adres waarop die lig gestop is, vergelyk met die adres van die middelste LED. As dit nie dieselfde is nie, flikker al die ligte twee keer rooi en begin die huidige vlak weer. As dit dieselfde is, hardloop cylon (FastLED -biblioteekskrif) twee keer, neem die moeilikheidsgraad toe en speel weer. Sodra die speler die laaste vlak geklop het, hardloop cylon agtste keer en begin die spel weer op vlak 1.

// Sikloon spel

#sluit "FastLED.h" // in tot 50 #define NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #definieer COLOR_ORDER RGB // reeks 0-64 #definieer BRIGHTNESS 50 // Definisie van moeilikheidsgraad #definisie MAKLIK 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 // Begin moeilikheid int moeilikheid = 1; // Definieer die verskeidenheid leds CRGB -leds [NUM_LEDS]; // Het die speler hierdie ronde gewen? Hierdie etiket word gebruik vir moeilikheidsparameters. bool wonThisRound = false; // Beginplek van die fietslig int LEDaddress = 0; // Is die spel aan die gang? bool Speel = waar; // Is dit die eerste oorwinning? bool CycleEnded = waar; // Knoppiebesonderhede const int buttonPin = 9; int buttonState = 0; // Initialiseer die led -biblioteek en arduino -funksies, ongeldige opstelling () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (BRIGHTNESS); pinMode (buttonPin, INPUT); Serial.begin (9600); } // Die vleis en aartappels // Twee modi - speel en eindig spel leegloop () {// EINDE SPEL buttonState = digitalRead (buttonPin); if (buttonState == HOOG) {Speel = vals; // Gebruiker het op die knoppie gedruk, en die LED het op die wenadres gestop. for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Swart; } leds [CENTER_LED] = CRGB:: Rooi; leds [LEDaddress] = CRGB:: Groen; FastLED.show (); as (CycleEnded = true) {int diff = abs (CENTER_LED - LEDaddress); // Vind afstand tussen die verligte led en die middelste led as (diff == 0) {wonThisRound = true; // Speler slaag die vlak suksesvol as (moeilikheidsgraad! = MISSIE_IMPOSSIBEL) {vir (int i = 0; i <2; i ++) {cylon (); }} if (moeilikheid == MISSIE_IMPOSSIBEL) {vir (int i = 0; i <8; i ++) {cylon (); } moeilikheidsgraad = 0; } toename Moeilikheid (); wonThisRound = vals; } anders {vertraging (1000); vir (int i = 0; i <2; i ++) {flash (); }} CycleEnded = vals; } LED -adres = 0; vertraging (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {Playing = true; }}} // SPEEL as (speel) {vir (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Swart; // Skakel al die leds} leds [CENTER_LED] = CRGB:: Rooi af; // Stel die kleur van die middel in op groen LED's [LED -adres] = CRGB:: Groen; // Stel die silinderende kleur in op rooi FastLED.show (); // Inisialiseer ligsiklus LED -adres ++; // Stel ligsiklus in op een led op 'n slag as (LEDaddress == NUM_LEDS) {LEDaddress = 0; } vertraging (getTime (moeilikheidsgraad)); buttonState = digitalRead (buttonPin); if (buttonState == HOOG) {Speel = vals; CycleEnded = waar; }}}} // Vlakparameters int getTime (int diff) // Wys tydvertraging vir geleide bewegingsbasis oor moeilikheid {int timeValue = 0; switch (diff) {case EASY: timeValue = 100; breek; geval MEDIUM: timeValue = 80; breek; saak HARD: timeValue = 60; breek; saak ON_SPEED: timeValue = 40; breek; saak SONIC_SPEED: timeValue = 30; breek; saak ROCKET_SPEED: timeValue = 20; breek; saak LIGHT_SPEED: timeValue = 13; breek; saak MISSION_IMPOSSIBLE: timeValue = 7; } retour timeValue; // Gee die vertragingsbedrag terug} // Wenprobleme verhoog parameters leegte verhoging Moeilikheid () {if (moeilikheid! = MISSION_IMPOSSIBLE && wonThisRound) {moeilikheid ++; }} // Verlore LED Wys leegte flits () {fill_solid (leds, NUM_LEDS, CRGB:: Rooi); FastLED.show (); vertraging (500); fill_solid (leds, NUM_LEDS, CRGB:: Swart); FastLED.show (); vertraging (500); } // Won LED Wys leegte fadeall () {vir (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} void cylon () {static uint8_t hue = 0; Serial.print ("x"); // Skuif eers die led in een rigting vir (int i = 0; i = 0; i--) {// Stel die led in op rooi LED's = CHSV (hue ++, 255, 255); // Wys die LED's FastLED.show (); // noudat ons die leds gewys het, stel die een terug na swart // leds = CRGB:: Black; fadeall (); // Wag 'n bietjie voordat ons rondloop en dit weer doen vertraag (10); }}

Stap 3: Installeer in Fixture

Installeer in toebehore
Installeer in toebehore
Installeer in toebehore
Installeer in toebehore

Ek gaan nie in besonderhede in hierdie afdeling ingaan nie. Daar is duisend verskillende maniere om hierdie gedeelte te volg, en ek dink dat u kreatief moet wees om te laat lyk hoe u daarvan hou. Dit gesê, die horlosie was redelik gerieflik om die LED's te huisves, aangesien dit klein aanwysers het wat ek as boormerke kon gebruik. Met die glasomslag kan ek dit ook as 'n tafel gebruik.

Die klittenband was ook baie handig om die LED -armatuur aan die elektroniese behuising te bevestig. Ek het ook klittenband op die Arduino gebruik. Dit het dit baie gerieflik gemaak om die Arduino uit te trek as ek die kode ooit wil verander.

Aanbeveel: