Turinys:

Arkadinis LED ciklono žaidimas: 4 žingsniai
Arkadinis LED ciklono žaidimas: 4 žingsniai

Video: Arkadinis LED ciklono žaidimas: 4 žingsniai

Video: Arkadinis LED ciklono žaidimas: 4 žingsniai
Video: NeoLight Cyclone 6 head Octopus Armour Moving Head #minimovinghead #octopus #cyclone #armor #djlight 2024, Rugsėjis
Anonim
Image
Image
Įdiekite „Fixture“
Įdiekite „Fixture“

Šio projekto tikslas buvo sukurti paprastą žaidimą naudojant „Arduino“, kuris būtų interaktyvus ir įdomus vaikams. Prisimenu, kad „Cyclone“arkadinis žaidimas buvo vienas iš mano mėgstamiausių arkadinių žaidimų, kai buvau jaunesnis, todėl nusprendžiau jį pakartoti. Tai labai paprastas projektas, kurį sudaro „Arduino“, eilutė individualiai adresuojamų šviesos diodų ir mygtukas.

Žaidimo tikslas yra sustabdyti dviračių lemputę, kai ji pasiekia nurodytą (raudoną) šviesos diodą. Jei pavyks, sunkumų lygis padidės. Jei nepavyks, šviesos ciklas bus paleistas iš naujo esant dabartiniam sunkumo lygiui.

Šis nurodymas buvo didžiulis mano kodavimo šaltinis.

1 žingsnis: Surinkite reikmenis

  • Pagrindiniai komponentai:

    • Arduino (aš naudojau UNO)
    • Individualiai adresuojamų šviesos diodų eilutė (naudojau nuorodą)
    • Mygtukas (naudojau nuorodą)
    • Spausdintinė plokštė (PCB) arba duonos plokštė
    • Maitinimo šaltinis (naudojau du atskirus maitinimo šaltinius, jei esate kūrybingas, galite išsisukti)

      • 5V 3A šviesos diodams
      • 9V 1A „Arduino“
  • Sistema:

    • Elektronikos korpusas (modifikavau „Goodwill“medinę lempą)
    • Šviesos diodų korpusas (pakeičiau jūsų standartinį sieninį laikrodį ir gręžiau skyles, naudodamas minučių identifikatorius kaip skylių žymėjimą. Jei įmanoma, naudokite medinį laikrodį, kad būtų lengviau gręžti.)
    • Mygtukų korpusas (aš naudoju alkūninį PVC vamzdį)
  • Įrankiai / kitos medžiagos:

    • Atsarginiai laidai jūsų grandinei
    • 10K (ištraukiamas rezistorius jungikliui) ir 470 omų (duomenų vielai ant šviesos diodų) rezistoriai
    • Gręžtuvas, skirtas skylių, skirtų šviesos diodams, sukūrimui ir būtinų skylių tvirtinimui, kad laidai galėtų praeiti
    • Lituoklis, skirtas lituoti grandinę prie PCB
    • Karštas klijų pistoletas, skirtas šviesos diodams pritvirtinti prie jūsų armatūros
    • Velcro arba tam tikros priemonės, skirtos kartu pritvirtinti rėmą
    • Tarpikliai neprivalomi skylėms, išgręžtoms laidams praeiti

2 veiksmas: įkelkite kodą

Būtinai atsisiųskite ir pridėkite „FastLED“biblioteką

Kodo šerdį (tuštumos ciklą) sudaro dvi būsenos: mygtukas aukštas (baigti žaidimą) ir žemas mygtukas (žaidžiamas). Kai vartotojas paspaudžia mygtuką, šviesos diodo adresas, kuriame šviesa buvo sustabdyta, lyginamas su centrinio šviesos diodo adresu. Jei jie nėra vienodi, visos lemputės du kartus mirksi raudonai ir dabartinis lygis vėl paleidžiamas. Jei jie yra vienodi, „cylon“(„FastLED“bibliotekos scenarijus) veikia du kartus, sunkumo lygis padidėja ir žaidimas atnaujinamas. Kai žaidėjas įveikia paskutinį lygį, „cylon“paleidžia aštuntą kartą, o žaidimas prasideda iš naujo.

// Ciklono žaidimas

#include "FastLED.h" // iki 50 #define NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #define COLOR_ORDER RGB // diapazonas 0-64 #define BRIGHTNESS 50 // Sunkumo lygių apibrėžimas #define EASY 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 // Pradedant sunkumą int sunkumas = 1; // Apibrėžkite šviesos diodų masyvą CRGB šviesos diodai [NUM_LEDS]; // Ar žaidėjas laimėjo šį turą? Ši žyma naudojama sudėtingumo parametrams. bool wonThisRound = false; // Dviračio šviesos pradinė vieta int LEDaddress = 0; // Ar žaidimas vyksta? bool Playing = tiesa; // Ar tai pirmoji pergalė? bool CycleEnded = tiesa; // Mygtuko informacija const int buttonPin = 9; int buttonState = 0; // Inicijuoti vedamą biblioteką ir arduino funkcijas void setup () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (BRIGHTNESS); pinMode (buttonPin, INPUT); Serial.begin (9600); } // Mėsa ir bulvės // Du režimai - žaidimo ir žaidimo pabaigos void loop () {// END GAME buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; // Vartotojas paspaudė mygtuką, o laimėtojo adresas nustojo šviesti. už (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; } šviesos diodai [CENTER_LED] = CRGB:: Raudona; šviesos diodai [LEDaddress] = CRGB:: Žalia; FastLED.show (); if (CycleEnded = true) {int diff = abs (CENTER_LED - LEDaddress); // Randa atstumą tarp apšviesto šviesos diodo ir centro šviesos diodo, jei (diff == 0) {wonThisRound = true; // Žaidėjas sėkmingai įveikė lygį, jei (sunkumas! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} if (sunkumas == MISSION_IMPOSSIBLE) {for (int i = 0; i <8; i ++) {cylon (); } sunkumas = 0; } padidinimasSunkumas (); wonThisRound = klaidinga; } else {delay (1000); (int i = 0; i <2; i ++) {flash (); }} CycleEnded = false; } LEDadresas = 0; vėlavimas (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {Groja = tiesa; }} // ŽAIDIMAS, jei (žaidžiamas) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Išjungia visus šviesos diodus} šviesos diodai [CENTER_LED] = CRGB:: Raudona; // Nustato centro LED spalvą į žalias lemputes [LEDaddress] = CRGB:: Green; // Nustato cilindro spalvos spalvą į raudoną FastLED.show (); // Inicijuoja šviesos ciklą LEDaddress ++; // Nustato šviesos ciklą į vieną šviesos diodą vienu metu, jei (LEDaddress == NUM_LEDS) {LEDaddress = 0; } uždelsimas (getTime (sunkumas)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; CycleEnded = tiesa; }}} // Lygio parametrai int getTime (int diff) // Grąžina laiko judėjimo bazės uždelsimą dėl sunkumo {int timeValue = 0; jungiklis (dif) {atvejis EASY: timeValue = 100; pertrauka; atvejis VIDUTINIS: timeValue = 80; pertrauka; atvejis HARD: timeValue = 60; pertrauka; atvejis ON_SPEED: timeValue = 40; pertrauka; atvejis SONIC_SPEED: timeValue = 30; pertrauka; atvejis ROCKET_SPEED: timeValue = 20; pertrauka; atvejis LIGHT_SPEED: timeValue = 13; pertrauka; atvejis MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Grąžinti uždelsimo sumą} // Laimėto sunkumo padidinimo parametrai void padidinimasDifunkcija () {if (sunkumas! = MISSION_IMPOSSIBLE && wonThisRound) {sunkumas ++; }} // Lost LED Show void flash () {fill_solid (LED, NUM_LEDS, CRGB:: Red); FastLED.show (); vėlavimas (500); „fill_solid“(šviesos diodai, NUM_LEDS, CRGB:: juodi); FastLED.show (); vėlavimas (500); } // Laimėtas LED šou void fadeall () {for (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} void cylon () {static uint8_t atspalvis = 0; Serial.print ("x"); // Pirmiausia stumkite šviesos diodą viena kryptimi, kad (int i = 0; i = 0; i--) {// Nustatykite pirmąjį šviesos diodą į raudonas lemputes = CHSV (atspalvis ++, 255, 255); // Rodyti šviesos diodus FastLED.show (); // dabar, kai parodėme šviesos diodus, iš naujo nustatykite pirmąjį ledą į juodą // leds = CRGB:: Black; išnyks (); // Šiek tiek palauk, kol pasuksime ir vėl tai padarysime (10); }}

3 žingsnis: Įdiekite „Fixture“

Įdiekite „Fixture“
Įdiekite „Fixture“
Įdiekite „Fixture“
Įdiekite „Fixture“

Šiame skyriuje nesigilinsiu į detales. Yra tūkstantis skirtingų būdų, kaip tai padaryti, ir manau, kad turėtumėte būti kūrybingi, kad atrodytų taip, kaip jums patinka. Be to, laikrodį buvo gana patogu naudoti šviesos diodams laikyti, nes jis turėjo minučių indikatorius, kuriuos galėjau naudoti kaip gręžimo žymes. Be to, stiklo dangtis taip pat leidžia man tai naudoti kaip stalą.

Velcro taip pat buvo labai naudingas tvirtinant LED šviestuvą prie elektronikos korpuso. Aš taip pat naudojau velcro ant „Arduino“. Dėl to labai patogu ištraukti „Arduino“, jei kada nors noriu pakeisti kodą.

Rekomenduojamas: