Оглавление:

Cyclone LED Arcade Game: 4 шага
Cyclone LED Arcade Game: 4 шага

Видео: Cyclone LED Arcade Game: 4 шага

Видео: Cyclone LED Arcade Game: 4 шага
Видео: Музыка бит, музыка детства #4 | Европейцы 2024, Ноябрь
Anonim
Image
Image
Установить в приспособление
Установить в приспособление

Целью этого проекта было создание простой игры с использованием Arduino, которая была бы интерактивной и занимательной для детей. Я помню, что аркадная игра Cyclone была одной из моих любимых аркадных игр, когда я был моложе, поэтому я решил повторить ее. Это очень простой проект, состоящий из Arduino, цепочки светодиодов с индивидуальным адресом и кнопки.

Цель игры - остановить велосипедный свет, когда он достигнет указанного (красного) светодиода. В случае успеха уровень сложности увеличится. В случае неудачи световой цикл перезапустится с текущим уровнем сложности.

Это руководство было огромным ресурсом для моей основы кодирования.

Шаг 1. Соберите припасы

  • Основные компоненты:

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

      • 5V 3A для светодиодов
      • 9V 1A для Arduino
  • Фреймворк:

    • Корпус электроники (доработал деревянный светильник от Goodwill)
    • Светодиодный корпус (я модифицировал ваши стандартные настенные часы и просверливал отверстия, используя минутные идентификаторы в качестве отметок отверстий. По возможности используйте деревянные часы, чтобы упростить сверление).
    • Корпус пуговицы (я использовал коленчатую ПВХ трубу)
  • Инструменты / другие материалы:

    • Запасная проводка для вашей схемы
    • Резисторы 10 кОм (понижающий резистор для переключателя) и 470 Ом (для провода передачи данных на светодиодах)
    • Просверлите отверстия для размещения светодиодов и сделайте все необходимые отверстия в светильнике для пропуска проводов.
    • Паяльник для пайки схемы на печатную плату
    • Пистолет для горячего клея для крепления светодиодов к светильнику
    • Липучка или какое-либо средство для скрепления каркаса вместе
    • Прокладки опционально для отверстий, просверленных для пропуска проводов

Шаг 2. Загрузите код

Убедитесь, что вы скачали и добавили библиотеку FastLED

Ядро кода (недействительный цикл) состоит из двух состояний: высокий уровень нажатия кнопки (конец игры) и низкий уровень нажатия кнопки (игра). Как только пользователь нажимает кнопку, адрес светодиода, на котором был остановлен свет, сравнивается с адресом центрального светодиода. Если они не совпадают, все индикаторы дважды мигают красным, и текущий уровень возобновляется. Если они совпадают, цилон (скрипт библиотеки FastLED) запускается дважды, уровень сложности увеличивается, и игра возобновляется. Как только игрок преодолевает последний уровень, цилон запускается восьмой раз, и игра перезапускается на уровне 1.

// Игра Cyclone

#include "FastLED.h" // до 50 #define 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 leds [NUM_LEDS]; // Выиграл ли игрок этот раунд? Этот тег используется для параметров сложности. bool wonThisRound = false; // Начальное местоположение велосипедного света int LEDaddress = 0; // Игра запущена? bool Playing = true; // Это первая победа? bool CycleEnded = true; // Детали кнопки const int buttonPin = 9; int buttonState = 0; // Инициализируем библиотеку светодиодов и функции arduino void setup () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (ЯРКОСТЬ); pinMode (buttonPin, ВВОД); Serial.begin (9600); } // Мясо и картофель // Два режима - Игра и конец игры void loop () {// КОНЕЦ ИГРЫ buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Играет = false; // Пользователь нажал кнопку, и светодиод на выигравшем адресе погас. для (int я = 0; я <NUM_LEDS; я ++) {светодиоды [я] = CRGB:: черный; } светодиоды [CENTER_LED] = CRGB:: Красный; светодиоды [LEDaddress] = CRGB:: Зеленый; FastLED.show (); if (CycleEnded = true) {int diff = abs (CENTER_LED - адрес светодиода); // Находит расстояние между горящим светодиодом и центральным светодиодом if (diff == 0) {wonThisRound = true; // Игрок успешно прошел уровень if (сложность! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} если (сложность == МИССИЯ_ВОЗМОЖНАЯ) {для (int я = 0; я <8; я ++) {cylon (); } сложность = 0; } увеличитьDifficulty (); wonThisRound = false; } else {задержка (1000); для (int я = 0; я <2; я ++) {вспышка (); }} CycleEnded = false; } LEDaddress = 0; задержка (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {Играет = true; }} // ИГРАЕМ if (Играем) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Выключает все светодиоды} leds [CENTER_LED] = CRGB:: Red; // Устанавливает цвет центрального светодиода на зеленые светодиоды [LEDaddress] = CRGB:: Green; // Устанавливает красный цвет светодиода цикла FastLED.show (); // Инициализирует световой цикл LEDaddress ++; // Устанавливает световой цикл для одного светодиода за раз if (LEDaddress == NUM_LEDS) {LEDaddress = 0; } задержка (getTime (сложность)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Играет = false; CycleEnded = true; }}} // Параметры уровня int getTime (int diff) // Возвращает временную задержку для движения ведомого на основе сложности {int timeValue = 0; переключатель (diff) {case EASY: timeValue = 100; перерыв; case MEDIUM: timeValue = 80; перерыв; case HARD: timeValue = 60; перерыв; case ON_SPEED: timeValue = 40; перерыв; case SONIC_SPEED: timeValue = 30; перерыв; case ROCKET_SPEED: timeValue = 20; перерыв; case LIGHT_SPEED: timeValue = 13; перерыв; case MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Возвращаем величину задержки} // Параметры увеличения сложности победы void УвеличитьDifficulty () {if (сложность! = MISSION_IMPOSSIBLE && wonThisRound) {сложность ++; }} // Утерянный светодиод показывает void flash () {fill_solid (leds, NUM_LEDS, CRGB:: Red); FastLED.show (); задержка (500); fill_solid (светодиоды, NUM_LEDS, CRGB:: Black); FastLED.show (); задержка (500); } // Выигранный светодиодный индикатор void fadeall () {for (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} void cylon () {static uint8_t hue = 0; Serial.print («х»); // Сначала сдвиньте светодиод в одном направлении for (int i = 0; i = 0; i--) {// Установите i-й светодиод на красный свет = CHSV (hue ++, 255, 255); // Показать светодиоды FastLED.show (); // теперь, когда мы показали светодиоды, сбросим i-й светодиод на черный // светодиоды = CRGB:: Black; fadeall (); // Подождите немного, прежде чем мы перейдем к циклу и сделаем это снова delay (10); }}

Шаг 3: Установите в приспособление

Установить в приспособление
Установить в приспособление
Установить в приспособление
Установить в приспособление

Я не буду вдаваться в подробности в этом разделе. Есть тысячи разных способов сделать эту часть работы, и я думаю, вы должны проявить творческий подход, чтобы она выглядела так, как вам нравится. При этом часы было довольно удобно использовать для размещения светодиодов, поскольку у них были индикаторы минут, которые я мог использовать в качестве разметки сверла. Кроме того, стеклянная крышка также позволяет мне использовать это как стол.

Липучка также была очень полезна для крепления светодиодного светильника к креплению корпуса электроники. Я также использовал липучку на Arduino. Это очень удобно для извлечения Arduino, если я когда-нибудь захочу изменить код.

Рекомендуемые: