Оглавление:

Матрица NeoPixels : Змейка: 4 шага
Матрица NeoPixels : Змейка: 4 шага

Видео: Матрица NeoPixels : Змейка: 4 шага

Видео: Матрица NeoPixels : Змейка: 4 шага
Видео: PROTEUS - создание LED-матрицы 16x16 (WS2812b) 2024, Июль
Anonim
Матрица NeoPixels : Игра Змейка
Матрица NeoPixels : Игра Змейка

Вы все еще помните игру в змейку, в которую мы играли на нашем игровом приставке или мобильном телефоне в детстве? Сегодня мы научимся делать змейку с матрицей 8 * 8 NeoPixels. Мы выбрали Arduino uno в качестве центра управления и модуль джойстика для управления змейкой.

Шаг 1: Список компонентов:

Аппаратное обеспечение:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X Гибкая 64 RGB LED 8 * 8 Матрица NeoPixels

1 X модуль джойстика BKOUT_MD01

3 X направляющая линия

Программное обеспечение:

IDE Arduino

Шаг 2: Подключение оборудования

Подключите NeoPixels к контакту D2.

«X» на модуле коммутации джойстика подключите контакт A0 на плате Arduino UNO, «Y» подключите контакт A1, «K» подключите контакт A2.

Шаг 3: программирование

P # включить

#define PIN 2 // Выходной контакт #define MAX_LED 64 // Количество шариков uint32_t c; int a = 0, число; беззнаковый символ huan = 0, ci = 0; беззнаковый символ u = 40; // Размер шрифта группы слов unsigned char x = 0; unsigned char Color [3]; символ без знака go = {2, 3, 4, 5, 9, 14, 17, 20, 22, 26, 27, 29, 34, 35, 36, 37, 41, 46, 49, 54, 58, 59, 60, 61}; // 24 символа без знака [8] [8] = {{0, 1, 2, 3, 4, 5, 6, 7}, {15, 14, 13, 12, 11, 10, 9, 8}, {16, 17, 18, 19, 20, 21, 22, 23}, {31, 30, 29, 28, 27, 26, 25, 24}, {32, 33, 34, 35, 36, 37, 38, 39}, {47, 46, 45, 44, 43, 42, 41, 40}, {48, 49, 50, 51, 52, 53, 54, 55}, {63, 62, 61, 60, 59, 58, 57, 56},}; unsigned char character [8] = // Установить слово для отправки {{0, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0, 0}, // 0 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, // 1 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 1, 1, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 2 {0, 1, 1, 1, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 3 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, // 4 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 5 {0, 1, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 6 {0, 1, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, // 7 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 8 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 9 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0 },}; беззнаковый символ отображает ядро [8] [8]; int speedS = 400; // Начальная скорость змейки int score; // Оценка игры int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Координата питания int SX, SY; // Координата головы змеи int KEY, K; int включен; // Разрешить перезапуск игры char sx [64]; // Координата тела змеи char sy [64]; Adafruit_NeoPixel strip = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM () {A: FX = случайный (0, 7); FY = случайный (0, 7); for (int i = 0; i <3 + score; i ++) // Предотвратить отображение еды на теле змеи {if (FX == sx && FY == sy ) goto A; }} void myDelay (unsigned int Time) {// Во время периода задержки движения змеи мы должны сделать что-то вроде блеска еды и прочитать направление джойстика для (int t = 1; t 950 && KEY! = 5) { К = 8; } иначе, если (yValue <50 && KEY! = 8) {K = 5; } иначе, если (xValue 950 && KEY! = 4) {K = 6; }} // Здесь вы можете сравнить, является ли направление клавиатуры противоположным направлению движения змейки. Если наоборот, откажитесь от клавиатуры. / *********************************************** ************************************************* ************************************************ ************************************************ ******** / void gameover () {// После остановки программы Gameover нажмите центральную кнопку, чтобы перезапустить игру. беззнаковое значение char, y; Цвет [0] = случайный (3, 18); // Устанавливаем цвет. Параметр R G B, диапазон 0-255. Цвет [1] = случайный (3, 18); Цвет [2] = случайный (3, 18); c = strip. Color (Цвет [1], Цвет [0], Цвет [2]); значение = оценка / 10; значение = значение * 4; у = 0; for (число = значение; число <значение + 4; число ++) {for (символ без знака по вертикали = 0; по вертикали <8; по вертикали ++) {отображает ядро [y] [по вертикали] = символ [число] [по вертикали]; } y ++; } значение = оценка% 10; значение = значение * 4; for (число = значение; число <значение + 4; число ++) {for (символ без знака по вертикали = 0; по вертикали <8; по вертикали ++) {отображает ядро [y] [по вертикали] = символ [число] [по вертикали]; } y ++; } for (unsigned char horizontal = 0; horizontal <8; horizontal ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {if (playscore [horizontal] [vertical] == 1) // Оцениваем, горит. {strip.setPixelColor (светлый [горизонтальный] [вертикальный], c); } else strip.setPixelColor (светлый [горизонтальный] [вертикальный], 0); }} strip.show (); // Отправка данных с задержкой (5000); К = 0; // Сброс направления джойстика sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Сбрасываем координаты змейки score = 0; // Сброс игрового счета speedS = 400; // Начальная скорость змейки} void setup () {Serial.begin (9600); // Инициализируем библиотеку strip.begin (); // Отправляем данные. По умолчанию цвет каждой точки равен 0. Таким образом, каждая точка не подсвечивается в начале. strip.show (); К = 0; // Сбрасываем направление джойстика sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Сбрасываем координаты змейки score = 0; // Сбрасываем счет в игре Color [0] = random (3, 18); // Устанавливаем цвет. Параметр R G B, диапазон 0-255. Цвет [1] = случайный (3, 18); Цвет [2] = случайный (3, 18); c = strip. Color (Цвет [1], Цвет [0], Цвет [2]); // Зеленый Красный Синий // Установить цвет для (число = 0; число <24; число ++) {strip.setPixelColor (go [число], c); } strip.show (); // Отправка данных с задержкой (2000); СЛУЧАЙНЫЙ(); // Производим еду} void mobile () {KEY = K; // Каждое движение змейки хоть раз меняет направление. if (KEY == 8) // Движение змейки вверх {for (int i = 2 + score; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sy [0] = sy [0] - 1; if (sy [0] <0) // Выйти за границу и продолжить с другой стороны sy [0] = 7; } else if (KEY == 5) // Движение змейки вниз {for (int i = 2 + score; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sy [0] = sy [0] + 1; if (sy [0]> 7) // Выйти за границу и продолжить с другой стороны sy [0] = 0; } else if (KEY == 4) // Движение змейки влево {for (int i = 2 + score; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sx [0] = sx [0] - 1; if (sx [0] <0) // Выйти за границу и продолжить с другой стороны sx [0] = 7; } else if (KEY == 6) // Движение змеи вправо {for (int i = 2 + score; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sx [0] = sx [0] + 1; if (sx [0]> 7) // Выйти за границу и продолжить с другой стороны sx [0] = 0; } // Перемещение тела змеи с помощью кнопки} void Display () {for (number = 0; number <64; number ++) // Очистить экран {strip.setPixelColor (number, 0); } strip.show (); Цвет [0] = 40; // Устанавливаем цвет. Параметр R G B, диапазон 0-255. Цвет [1] = 0; Цвет [2] = 0; c = strip. Color (Цвет [1], Цвет [0], Цвет [2]); // Зеленый Красный Синий // Установить цвет x = light [FX] [FY]; // Отображаем полоску еды. SetPixelColor (x, c); Цвет [0] = случайный (3, 18); // Устанавливаем цвет. Параметр R G B, диапазон 0-255. Цвет [1] = случайный (3, 18); Цвет [2] = случайный (3, 18); c = strip. Color (Цвет [1], Цвет [0], Цвет [2]); // Зеленый Красный Синий // Установить цвет для (int i = 2 + score; i> 0; i--) // Отображение тела змеи {x = light [sx [sy ; strip.setPixelColor (x, c); } Цвет [0] = 0; // Устанавливаем цвет. Параметр R G B, диапазон 0-255. Цвет [1] = 40; Цвет [2] = 0; c = strip. Color (Цвет [1], Цвет [0], Цвет [2]); // Зеленый Красный Синий // Установить цвет x = light [sx [0] [sy [0]; // Отображение полосы головы змеи. SetPixelColor (x, c); strip.show (); // Отправляем данные} void loop () {mobile (); myDelay (speedS); // Внутри () - время задержки. отображает (); SX = sx [0]; SY = sy [0]; // Получить координату головы змеи для (int i = 1; i <= 2 + score; i ++) {if (SX == sx && SY == sy ) gameover (); } // Оцениваем, коснулась ли голова змеи своего тела. Если коснулись, то вперед в GameOver. если (SY == FY && SX == FX) {RANDOM (); оценка ++; Цвет [0] = 40; // Устанавливаем цвет. Параметр R G B, диапазон 0-255. Цвет [1] = 0; Цвет [2] = 0; c = strip. Color (Цвет [1], Цвет [0], Цвет [2]); // Зеленый Красный Синий // Установить цвет x = light [FX] [FY]; // Отображаем полоску еды. SetPixelColor (x, c); strip.show (); // Отправляем данные if (! (score% 5)) {// Ускоряем скорость змейки в соответствии со счетом. Каждые 5 съеденных продуктов увеличивайте скорость на 100 мс. speedS = speedS - 50; if (speedS <150) // Нижний предел 200 мс. Если скорость ниже 200 мс, скорость остается 200 мс. speedS = 150; }} // Оцениваем, съели ли еда. Если змея съела пищу, то плюс очки и регенерация пищи случайным образом. }

Результат эксперимента

Шаг 4: Результат эксперимента

Относительные показания:

Автомобиль FreaksBot Bluetooth

Зажгите первую бусину на матрице NeoPixels 8 * 8 с помощью Arduino

Micro: bit Experiment 05: RGB LED - Elecfreaks Mirco: Bit Starter Kit Course

Пятница Сообщение о продукте: Набор для пайки светодиодного музыкального частотного спектра

Используйте ElecFreaks Micro: bit Tinker Kit, чтобы сделать умный свет

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