Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Pixel Chaser: игра на один тап с NeoPixel Ring и Arduino Nano

Компоненты и материалы

Компонент Количество Примечание
Arduino Nano R3 1 Любой МК с 2 свободными пинами
Adafruit NeoPixel Ring (WS2812, 24 LED) 1 Игровое поле
Половинчатая беспаечная плата 1
Резистор 10 кОм 1 Pull-down для кнопки
Тактильная кнопка 12 мм 1 Единственное управление
Перемыточные провода 1 набор

Инструменты и софт

Концепция

Бывший геймдев, искал «святой грааль» мобильных игр — идеальную one-tap игру. Решил перенести идею на микроконтроллер: одна кнопка, кольцо LED, физика движения. Родился Pixel Chaser!

Пошаговая сборка

  1. Nano на краю платы — USB разъём наружу.
  2. Кнопка на противоположном краю — удобно жать большим пальцем.
  3. Резистор 10 кОм между одним контактом кнопки и GND (pull-down, защита от КЗ).
  4. Провод от другого контакта кнопки к VCC — при нажатии HIGH.
  5. Провод от GND-стороны кнопки к D3 Nano — считываем состояние.
  6. NeoPixel Ring: VCC → VCC шина, GND → GND шина, DI → D4 Nano.
  7. Питание: 5V Nano → VCC шина, GND Nano → GND шина.
  8. Загрузка кода — и играем!

Pixel Chaser: игра на один тап с NeoPixel Ring и Arduino Nano

Pixel Chaser: игра на один тап с NeoPixel Ring и Arduino Nano

Pixel Chaser: игра на один тап с NeoPixel Ring и Arduino Nano

Pixel Chaser: игра на один тап с NeoPixel Ring и Arduino Nano

Pixel Chaser: игра на один тап с NeoPixel Ring и Arduino Nano

Pixel Chaser: игра на один тап с NeoPixel Ring и Arduino Nano

Pixel Chaser: игра на один тап с NeoPixel Ring и Arduino Nano

Pixel Chaser: игра на один тап с NeoPixel Ring и Arduino Nano

Pixel Chaser: игра на один тап с NeoPixel Ring и Arduino Nano

Правила игры

Код (Pixel Chaser Game - Arduino Code)

/* Pixel Chaser Game - v1.0.0
   Author: Seon Rozenblum (unexpectedmaker.com)
   License: GNU GPL v3
*/
#include <Adafruit_NeoPixel.h>
#include "OneButton.h"

#define PIXELPIN 4
#define NUMPIXELS 24
#define BUTTON_TAP 3

OneButton buttonTAP(BUTTON_TAP, false);
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIXELPIN, NEO_GRB + NEO_KHZ800);

int playerIndex = -1, playerIndexTrail = -1, playerDirection = 1;
float nextMove = 0, currentPlayerSpeed = 150;
unsigned long countdown = 0;
int enemyIndex = -1, coinIndex = -1;
int score = 0, bestScore = 0, lastScore = 0;
bool gameOver = false;

void setup() {
  pinMode(BUTTON_TAP, INPUT);
  buttonTAP.attachClick(singleClick);
  buttonTAP.attachLongPressStart(longClick);
  pixels.begin();
  pixels.setBrightness(20);
  countdown = millis() + 2000;
}

void loop() {
  buttonTAP.tick();
  if (gameOver) return;
  SetLevel();
  if (countdown > millis()) { pixels.show(); return; }
  DisplayPlayer();
  pixels.show();
}

void ClearLevel() {
  for (int i=0; i= 0) pixels.setPixelColor(playerIndexTrail, 0);
    if (playerIndex >= 0) {
      pixels.setPixelColor(playerIndex, pixels.Color(0,100,0));
      playerIndexTrail = playerIndex;
    }
    playerIndex += playerDirection;
    if (playerIndex < 0) playerIndex = NUMPIXELS-1;
    else if (playerIndex == NUMPIXELS) playerIndex = 0;
    pixels.setPixelColor(playerIndex, pixels.Color(0,255,0));

    if (playerIndex == coinIndex) {
      enemyIndex = -1; coinIndex = -1; score++;
      currentPlayerSpeed = constrain(currentPlayerSpeed - 10, 50, 150);
      ClearLevel();
      pixels.setPixelColor(playerIndex, pixels.Color(0,255,0));
    } else if (playerIndex == enemyIndex) {
      lastScore = score; if (score >= bestScore) bestScore = score;
      GameOver(); gameOver = true;
      enemyIndex = -1; coinIndex = -1; playerIndex = -1;
    }
  }
}

void singleClick() {
  if (countdown > millis()) return;
  playerDirection = -playerDirection;
}

void longClick() {
  gameOver = !gameOver;
  if (gameOver) { enemyIndex = -1; coinIndex = -1; playerIndex = -1; currentPlayerSpeed = 150; ClearLevel(); }
  else { ClearLevel(); score = 0; currentPlayerSpeed = 150; countdown = millis() + 2000; }
}

Контакты автора

Производственный процесс

  1. Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
  2. Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
  3. Создание классической игры Pong на Arduino UNO с OLED-дисплеем: пошаговый урок
  4. Создание рулетки на 37 светодиодов с Arduino Nano
  5. DIY USB-геймпад на Arduino: собственный высокопроизводительный контроллер
  6. Arduino Breakout на сенсорном TFT 2.4″: классическая аркада своими руками
  7. Tetris на Arduino Nano: самостоятельная сборка 16×8 LED-матрицы на 74HC595
  8. Магнитная левитация на отталкивании с Arduino: Простая схема и DIY-руководство
  9. Автоматизация игры «Динозавр» в Chrome на Arduino и LDR с Python
  10. Arduino Home Controller с Alexa: умный дом голосовым управлением