Съдържание:

Циклон LED аркадна игра: 4 стъпки
Циклон LED аркадна игра: 4 стъпки

Видео: Циклон LED аркадна игра: 4 стъпки

Видео: Циклон LED аркадна игра: 4 стъпки
Видео: Аркадная игра-охотник за светодиодами Arduino Cyclone 2024, Ноември
Anonim
Image
Image
Инсталирайте в Fixture
Инсталирайте в Fixture

Целта на този проект беше да се създаде проста игра, използваща Arduino, която да бъде интерактивна и забавна за децата. Спомням си, че аркадната игра Cyclone беше една от любимите ми аркадни игри, когато бях по -млад, затова реших да я повторя. Това е много прост проект, който се състои от Arduino, низ от индивидуално адресируеми светодиоди и бутон за натискане.

Целта на играта е да спре колоезденето, когато достигне посочения (червен) светодиод. При успех нивото на трудност ще се увеличи. Ако не успее, светлинният цикъл ще се рестартира на текущото ниво на трудност.

Тази инструкция беше огромен ресурс за ядрото на моето кодиране.

Стъпка 1: Съберете консумативи

  • Главни компоненти:

    • Arduino (използвах UNO)
    • Низ от индивидуално адресируеми светодиоди (използвах връзка)
    • Бутон (използвах връзка)
    • Печатна платка (PCB) или платка
    • Захранване (използвах две отделни захранвания, може да се измъкнете с едно, ако сте креативни)

      • 5V 3A за светодиоди
      • 9V 1A за Arduino
  • Рамка:

    • Корпус за електроника (модифицирах дървена лампа от Goodwill)
    • LED корпус (модифицирах стандартния стенен часовник и пробих дупки, използвайки идентификаторите на минутите като маркировки на дупки. Използвайте дървен часовник, ако е възможно, за да улесните пробиването.)
    • Корпус с копчета (използвах лакътна PVC тръба)
  • Инструменти / Други материали:

    • Резервно окабеляване за вашата верига
    • 10K (издърпващ се резистор за превключвател) и 470 ома (за проводник за данни на светодиоди) резистори
    • Пробийте за създаване на дупки за поставяне на вашите светодиоди и за направа на всички необходими отвори във вашето тяло, за да прокарате проводници
    • Поялник за запояване на вашата верига към печатна платка
    • Пистолет за горещо лепило за закрепване на светодиодите към вашето тяло
    • Велкро или някакво средство за обезопасяване на рамката
    • Уплътнения по избор за пробити отвори за преминаване на проводници

Стъпка 2: Качване на код

Не забравяйте да изтеглите и добавите библиотеката "FastLED"

Ядрото на кода (void loop) се състои от две състояния: бутон бутон високо (Край на играта) и бутон бутон ниско (Възпроизвеждане). След като потребителят натисне бутона, LED адресът, на който е спряла светлината, се сравнява с адреса на централния светодиод. Ако те не са еднакви, всички лампички мигат два пъти в червено и текущото ниво се рестартира. Ако те са едни и същи, cylon (FastLED библиотечен скрипт) работи два пъти, нивото на трудност се увеличава и играта се възобновява. След като играчът победи последното ниво, cylon бяга осми пъти и играта се рестартира на ниво 1.

// Игра с циклон

#include "FastLED.h" // до 50 #deteine NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #define COLOR_ORDER RGB // диапазон 0-64 #define BRIGHTNESS 50 // Определяне на нивата на трудност #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 // Трудност при стартиране int трудност = 1; // Определяме масива от светодиоди CRGB светодиоди [NUM_LEDS]; // Играчът спечели ли този рунд? Този маркер се използва за параметри на трудност. bool wonThisRound = false; // Начално местоположение на колоездачната светлина int LEDaddress = 0; // Играта работи ли? bool Играе = вярно; // Това ли е първата победа? bool CycleEnded = вярно; // Подробности за бутоните const int buttonPin = 9; int buttonState = 0; // Инициализиране на led библиотеката и arduino функции void setup () {FastLED.addLeds (светодиоди, NUM_LEDS); FastLED.setBrightness (BRIGHTNESS); pinMode (buttonPin, INPUT); Serial.begin (9600); } // Месото и картофите // Два режима - Игра и прекратяване на играта void loop () {// END GAME buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Възпроизвеждане = невярно; // Потребителят е натиснал бутона и светодиодът спря на печелившия адрес. for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Черен; } светодиоди [CENTER_LED] = CRGB:: Червено; светодиоди [LED адрес] = CRGB:: Зелено; FastLED.show (); if (CycleEnded = true) {int diff = abs (CENTER_LED - LEDaddress); // Намира разстояние между светещия светодиод и централния светодиод, ако (diff == 0) {wonThisRound = true; // Играчът успешно победи нивото if (трудност! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} ако (трудност == MISSION_IMPOSSIBLE) {for (int i = 0; i <8; i ++) {cylon (); } трудност = 0; } увеличаване на трудността (); wonThisRound = false; } else {забавяне (1000); for (int i = 0; i <2; i ++) {flash (); }} CycleEnded = false; } LEDадрес = 0; забавяне (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {Playing = true; }} // ПЪРВАНЕ, ако (Играе) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Изключва всички светодиоди} светодиоди [CENTER_LED] = CRGB:: Червен; // Задава цвета на централния светодиод към зелени светодиоди [LEDaddress] = CRGB:: Green; // Задава цветния светодиоден цвят в червено FastLED.show (); // Инициализира светлинен цикъл LEDaddress ++; // Задава светлинен цикъл на един светодиод наведнъж if (LEDaddress == NUM_LEDS) {LEDaddress = 0; } забавяне (getTime (трудност)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Възпроизвеждане = невярно; CycleEnded = вярно; }}} // Параметри на нивото int getTime (int diff) // Връща забавяне на времето за базата на движението на LED при трудност {int timeValue = 0; switch (разл.) {случай EASY: timeValue = 100; прекъсване; случай СРЕДНА: timeValue = 80; прекъсване; случай HARD: timeValue = 60; прекъсване; случай ON_SPEED: timeValue = 40; прекъсване; случай SONIC_SPEED: timeValue = 30; прекъсване; случай ROCKET_SPEED: timeValue = 20; прекъсване; случай LIGHT_SPEED: timeValue = 13; прекъсване; случай MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Върнете размера на забавянето} // Печелене на параметрите за увеличаване на трудността void увеличениеDifficulty () {if (трудност! = MISSION_IMPOSSIBLE && wonThisRound) {трудност ++; }} // Изгубен светодиод Show void flash () {fill_solid (светодиоди, NUM_LEDS, CRGB:: червен); FastLED.show (); забавяне (500); fill_solid (светодиоди, NUM_LEDS, CRGB:: черен); FastLED.show (); забавяне (500); } // Спечелен светодиод Show void fadeall () {for (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} void cylon () {static uint8_t hue = 0; Serial.print ("x"); // Първо плъзнете светодиода в една посока за (int i = 0; i = 0; i--) {// Задайте i-тото доведено до червени светодиоди = CHSV (нюанс ++, 255, 255); // Показване на светодиодите FastLED.show (); // сега, след като показахме светодиодите, нулирайте i -тата светлина към черен // светодиоди = CRGB:: Черен; fadeall (); // Изчакайте малко преди да се въртим и да го направим отново delay (10); }}

Стъпка 3: Инсталирайте в Fixture

Инсталирайте в Fixture
Инсталирайте в Fixture
Инсталирайте в Fixture
Инсталирайте в Fixture

Няма да навлизам в подробности в този раздел. Има хиляди различни начини да разгледате тази част и мисля, че трябва да бъдете креативни, за да изглеждате така, както ви харесва. Като се има предвид това, часовникът беше доста удобен за използване за поставяне на светодиодите, тъй като имаше минутни индикатори, които успях да използвам като маркировка за бормашина. Също така, стъкленият капак също ми позволява да го използвам като маса.

Велкрото беше много полезно и за закрепване на LED осветителното тяло към корпуса на електрониката. Използвах и велкро на Arduino. Това го направи много удобен за изваждане на Arduino, ако някога искам да променя кода.

Препоръчано: