Мазмұны:

NeoPixels матрицасы: Жылан ойыны: 4 қадам
NeoPixels матрицасы: Жылан ойыны: 4 қадам

Бейне: NeoPixels матрицасы: Жылан ойыны: 4 қадам

Бейне: NeoPixels матрицасы: Жылан ойыны: 4 қадам
Бейне: LIGHT EFFECT by WS2812B NEOPIXEL ESP32 DIY MATRIX 16x16 ide ARDUINO 2024, Шілде
Anonim
NeoPixels матрицасы: Жылан ойыны
NeoPixels матрицасы: Жылан ойыны

Бала кезімізде ойын қорабында немесе ұялы телефонда ойнаған жыландар ойыны әлі есіңізде ме? Бүгін біз 8*8 NeoPixels Matrix көмегімен жылан ойынын жасауды үйренеміз. Біз басқару орталығы ретінде жылуды басқару үшін Arduino uno мен Joystick разряд модулін таңдаймыз.

1 -қадам: компоненттер тізімі:

Жабдық:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X икемді 64 RGB LED 8*8 NeoPixels матрицасы

1 X джойстиктің үзілу модулі BKOUT_MD01

3 X бағыттаушы сызық

Бағдарламалық қамтамасыз ету:

Arduino IDE

2 -қадам: Жабдыққа қосылу

NeoPixels қосқышын D2 түйреуішіне қосыңыз.

Joystick ажырату модуліндегі «X» Arduino UNO тақтасындағы A0 түйреуішін, «Y» қосқыш A1, «K» қосқыш A2 түйреуішін қосады.

3 -қадам: бағдарламалау

P#қамтиды

#PIN 2 анықтаңыз // шығыс түйрегіші #dexine MAX_LED 64 // бисер саны uint32_t c; int a = 0, сан; белгісіз char huan = 0, ci = 0; белгісіз char u = 40; // белгісіз сөздер тобының қаріп өлшемі char x = 0; белгісіз таңба Түс [3]; белгісіз char 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},}; белгісіз таңба [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 жылдамдығыS = 400; // Жылан int балының бастапқы жылдамдығы; // 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 жолағы = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM () {A: FX = random (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) {// Жылан қозғалысының кешігуі кезінде біз тағамның жарқылын жасауымыз керек және Joystick бағытын оқуымыз керек (int t = 1; t 950 && KEY! = 5) { K = 8; } if if (yValue <50 && KEY! = 8) {K = 5; } else if (xValue 950 && KEY! = 4) {K = 6; }} // Мұнда сіз пернетақта бағыты жыланның қозғалу бағытына қарама -қарсы екенін салыстыра аласыз. Егер ол керісінше болса, пернетақтадан бас тартыңыз. /************************************************* ************************************************ ************************************************ ************************************************ ********/ void gameover () {// Gameover бағдарламасы тоқтаған соң, ойынды қайта бастау үшін орталық түймені басыңыз. белгісіз таңбалық мән, у; Түс [0] = кездейсоқ (3, 18); // Түсті орнатыңыз. Параметр-R G B, ауқымы 0-255. Түс [1] = кездейсоқ (3, 18); Түс [2] = кездейсоқ (3, 18); c = strip. Color (Түс [1], Түс [0], Түс [2]); мән = балл / 10; мән = мән * 4; y = 0; for (number = value; number <value+4; number ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {displayscore [y] [vertical] = таңба [сан] [тік]; } y ++; } мән = балл % 10; мән = мән * 4; for (number = value; number <value+4; number ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {displayscore [y] [vertical] = таңба [сан] [тік]; } y ++; } үшін (белгісіз таңба көлденең = 0; көлденең <8; көлденең ++) {үшін (белгісіз таңба тік = 0; тік <8; тік ++) {if (дисплей ұпайы [көлденең] [тік] == 1) // Жарықтың бар -жоғын бағалаңыз қосулы. {strip.setPixelColor (ашық [көлденең] [тік], в); } else strip.setPixelColor (ашық [көлденең] [тік], 0); }} strip.show (); // Деректерді жіберуді кешіктіру (5000); K = 0; // Джойстиктің бағытын қалпына келтіру sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Жылан координатасының есебін қалпына келтіру = 0; // Ойын ұпайының жылдамдығын қалпына келтіруS = 400; // Жыланның бастапқы жылдамдығы} void setup () {Serial.begin (9600); // Library strip.begin () инициализациялау; // Деректерді жіберу. Әр нүктенің түсін 0 деп әдепкі етіп орнатыңыз. Сондықтан әрбір нүкте басында жарықтандырылмайды. strip.show (); K = 0; // Джойстик схемасын қалпына келтіру sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Жылан координатасының есебін қалпына келтіру = 0; // Ойын есебін қалпына келтіру Түс [0] = кездейсоқ (3, 18); // Түсті орнатыңыз. Параметр-R G B, ауқымы 0-255. Түс [1] = кездейсоқ (3, 18); Түс [2] = кездейсоқ (3, 18); c = strip. Color (Түс [1], Түс [0], Түс [2]); // Жасыл қызыл көк // Түсті орнатыңыз (сан = 0; сан <24; сан ++) {strip.setPixelColor (өту [сан], в); } strip.show (); // Деректерді жіберуді кешіктіру (2000); RANDOM (); // Тамақ өндіру} 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; } if 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 (сан, 0); } strip.show (); Түс [0] = 40; // Түсті орнатыңыз. Параметр R G B, диапазоны 0-255. Түс [1] = 0; Түс [2] = 0; c = strip. Color (Түс [1], Түс [0], Түс [2]); // Жасыл Қызыл Көк // Түсті орнату x = ақшыл [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 + балл; 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 = ақшыл [sx [0] [sy [0]; // Жылан басының жолағын көрсету.setPixelColor (x, c); strip.show (); // Деректерді жіберу} void loop () {mobile (); myDelay (speedS); // Within ішінде) - кешіктіру уақыты. көрсетеді (); SX = sx [0]; SY = sy [0]; // Жылан басының координатасын алыңыз (int i = 1; i <= 2+балл; 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 = ақшыл [FX] [FY]; // Тамақтану жолағын көрсету.setPixelColor (x, c); strip.show (); // Деректерді жіберу егер (! (балл % 5)) {// Ұпайға сәйкес жылан жылдамдығын тездетіңіз. Әр 5 тағам жейді, 100 мс. жылдамдықS = жылдамдықS - 50; if (speedS <150) // Төменгі шегі - 200 мс. Егер жылдамдық 200 мс төмен болса, жылдамдық 200 мс қалады. жылдамдықS = 150; }} // Тамақ жеді ме, жоқ па, соны бағалаңыз. Егер жылан тамақ жеген болса, онда плюс ұпай жинап, тағамды кездейсоқ жаңартады. }

Эксперимент нәтижесі

4 -қадам: эксперимент нәтижесі

Салыстырмалы оқулар:

Bluetooth көлігі FreaksBot

Бірінші моншақты Arduino көмегімен 8*8 NeoPixels матрицасына жағыңыз

Микро: бит эксперименті 05: RGB светодиоды - Elecfreaks Mirco: бит стартерлік жиынтығы

Жұма өнімі: LED музыкалық жиілік спектрлі дисплейлі дәнекерлеу жинағы

Ақылды жарық жасау үшін ElecFreaks Micro: bit Tinker жиынтығын қолданыңыз

Ұсынылған: