Sisukord:

Cyclone LED Arcade Game: 4 sammu
Cyclone LED Arcade Game: 4 sammu

Video: Cyclone LED Arcade Game: 4 sammu

Video: Cyclone LED Arcade Game: 4 sammu
Video: SOME LOVELY BOARD GAMES 2 2024, September
Anonim
Image
Image
Installige Fixture'i
Installige Fixture'i

Selle projekti eesmärk oli luua Arduino abil lihtne mäng, mis oleks lastele interaktiivne ja meelelahutuslik. Mäletan, et Cyclone'i arkaadmäng oli nooremana üks mu lemmikmänge, nii et otsustasin seda korrata. See on väga lihtne projekt, mis koosneb Arduino'st, individuaalselt adresseeritavate LED -ide stringist ja nupust.

Mängu eesmärk on peatada jalgrattatuli, kui see jõuab näidatud (punase) valgusdioodini. Kui see õnnestub, suureneb raskusaste. Kui see ebaõnnestub, algab valgustsükkel uuesti praegusel raskusastmel.

See juhend oli minu kodeerimise tuuma jaoks tohutu ressurss.

Samm: koguge tarvikuid

  • Peamised komponendid:

    • Arduino (ma kasutasin UNO -d)
    • Individuaalselt adresseeritavate LED -ide string (kasutasin linki)
    • Vajutage nuppu (kasutasin linki)
    • Trükkplaat (PCB) või leivaplaat
    • Toiteallikas (kasutasin kahte eraldi toiteallikat, võite loovuse korral ühest pääseda)

      • 5V 3A LED -ide jaoks
      • 9V 1A Arduino jaoks
  • Raamistik:

    • Elektroonika korpus (muutsin firmaväärtusest puidust lambivalgustit)
    • LED -korpus (muutsin teie tavalist seinakella ja puurisin auke, kasutades aukude märgistustena minuti identifikaatoreid. Puurimise hõlbustamiseks kasutage võimaluse korral puidust kella.)
    • Nuppude korpus (kasutasin küünarnukist PVC toru)
  • Tööriistad / muud materjalid:

    • Varundage oma vooluahela juhtmestik
    • 10K (lüliti allatõmmatav takisti) ja 470 oomi (andmesidejuhtmete puhul LED-idel) takistid
    • Puurige aukude loomiseks oma LED -ide paigutamiseks ja vajalike aukude tegemiseks oma seadmesse juhtmete läbimiseks
    • Jootekolb ahela jootmiseks trükkplaadile
    • Kuum liimipüstol LED -de kinnitamiseks teie seadme külge
    • Velcro või mõni vahend raami kokku kinnitamiseks
    • Tihendid valikulised juhtmete läbimiseks puuritud aukude jaoks

2. toiming: koodi üleslaadimine

Laadige kindlasti alla ja lisage "FastLED" kogu

Koodi tuum (tühine tsükkel) koosneb kahest olekust: surunupp kõrgel (Lõpeta mäng) ja nupp madalal (Mängimine). Kui kasutaja nupule vajutab, võrreldakse LED -aadressi, millel tuli peatati, ja keskmise LED -i aadressi. Kui need pole samad, vilguvad kõik tuled kaks korda punaselt ja praegune tase taaskäivitub. Kui need on samad, käivitatakse cylon (FastLED raamatukogu skript) kaks korda, raskusaste suureneb ja mängimine jätkub. Kui mängija alistab viimase taseme, jookseb cylon kaheksandat korda ja mäng algab uuesti tasemelt 1.

// Tsüklonimäng

#include "FastLED.h" // kuni 50 #define NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #define COLOR_ORDER RGB // vahemik 0-64 #define BRIGHTNESS 50 // raskusastmete määratlus #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 // Alustamisraskused int raskus = 1; // Määra ledide massiiv CRGB LEDid [NUM_LEDS]; // Kas mängija võitis selle vooru? Seda märgendit kasutatakse raskusparameetrite jaoks. bool wonThisRound = vale; // Jalgrattatule lähtekoht int LEDaddress = 0; // Kas mäng töötab? bool Mängimine = tõsi; // Kas see on esimene võit? bool CycleEnded = tõsi; // Nupu üksikasjad const int nuppPin = 9; int buttonState = 0; // Initsialiseeri led -teegi ja arduino funktsioonid void setup () {FastLED.addLeds (ledid, NUM_LEDS); FastLED.setBrightness (Heledus); pinMode (buttonPin, INPUT); Seriaalne algus (9600); } // Liha ja kartul // Kaks režiimi - mängimine ja mängu lõpp void loop () {// END GAME buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Mängib = false; // Kasutaja on nuppu vajutanud ja valgusdiood on võitja aadressil peatunud. jaoks (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; } LEDid [CENTER_LED] = CRGB:: Punane; ledid [LEDaddress] = CRGB:: Roheline; FastLED.show (); if (CycleEnded = true) {int diff = abs (CENTER_LED - LED -aadress); // Leiab kauguse valgustatud LED -i ja keskjoone vahel, kui (diff == 0) {wonThisRound = true; // Mängija edukalt ületas taseme, kui (raskus! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} kui (raskusaste == MISSION_IMPOSSIBLE) {jaoks (int i = 0; i <8; i ++) {cylon (); } raskusaste = 0; } suurenemineKoormus (); wonThisRound = vale; } muu {viivitus (1000); jaoks (int i = 0; i <2; i ++) {flash (); }} CycleEnded = vale; } LED -aadress = 0; viivitus (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {Mängib = true; }} // MÄNGIMINE kui (Mängib) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Lülitab kõik ledid välja} LEDid [CENTER_LED] = CRGB:: Red; // Seab keskjoone värvi rohelisteks LED -ideks [LEDaddress] = CRGB:: Green; // Seab silindri ledi värvi punaseks FastLED.show (); // Initsialiseerib valgustsükli LED -aadress ++; // Seab valgustsükli ühele ledile korraga, kui (LEDaddress == NUM_LEDS) {LEDaddress = 0; } viivitus (getTime (raskus)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Mängib = false; CycleEnded = tõsi; }}} // Taseparameetrid int getTime (int diff) // Tagastab ajaviite LED -liikumise baasile raskuse {int timeValue = 0; lüliti (dif) {case EASY: timeValue = 100; murda; juhtum MEDIUM: timeValue = 80; murda; juhtum HARD: timeValue = 60; murda; juhtum ON_SPEED: timeValue = 40; murda; juhtum SONIC_SPEED: timeValue = 30; murda; juhtum ROCKET_SPEED: timeValue = 20; murda; juhtum LIGHT_SPEED: timeValue = 13; murda; juhtum MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Tagasta viivituse summa} // Võitmisraskuse suurendamise parameetrid void padidDifrighty () {if (raskus! = MISSION_IMPOSSIBLE && wonThisRound) {raskus ++; }} // Lost LED Show void flash () {fill_solid (ledid, NUM_LEDS, CRGB:: Red); FastLED.show (); viivitus (500); fill_solid (ledid, NUM_LEDS, CRGB:: must); FastLED.show (); viivitus (500); } // Won LED Show void fadeall () {for (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} tühine silinder () {staatiline uint8_t toon = 0; Serial.print ("x"); // Lükake esmalt LED-i ühes suunas (int i = 0; i = 0; i--) {// Määrake i-nda LED-i punased LED-id = CHSV (toon ++, 255, 255); // Näita LED -e FastLED.show (); // nüüd, kui oleme LED -e näidanud, lähtestage esimene led mustaks // leds = CRGB:: Black; fadeall (); // Oota natuke, enne kui ringi teeme ja seda uuesti tegema viivitame (10); }}

Samm: paigaldage kinnitusseadmesse

Installige Fixture'i
Installige Fixture'i
Installige Fixture'i
Installige Fixture'i

Ma ei hakka selles osas üksikasjadesse laskuma. Selle osa jaoks on tuhat erinevat viisi ja ma arvan, et peaksite olema loominguline, et see näeks välja nii, nagu teile meeldib. Nagu öeldud, oli kella LED -de paigutamiseks üsna mugav kasutada, kuna sellel olid minutinäitajad, mida sain kasutada puurimärgistustena. Samuti võimaldab klaaskate seda kasutada lauaks.

Velcro oli väga kasulik ka LED -i kinnitamiseks elektroonika korpuse külge. Kasutasin Arduino peal ka takjakinnitust. See muutis Arduino väljatõmbamise väga mugavaks, kui tahan kunagi koodi muuta.

Soovitan: