Mundarija:

NeoPixels matritsasi: ilon o'yini: 4 qadam
NeoPixels matritsasi: ilon o'yini: 4 qadam

Video: NeoPixels matritsasi: ilon o'yini: 4 qadam

Video: NeoPixels matritsasi: ilon o'yini: 4 qadam
Video: BTT Octopus V1.1 — Дополнительные сервоприводы 2024, Iyul
Anonim
NeoPixels matritsasi: ilon o'yini
NeoPixels matritsasi: ilon o'yini

Hali ham bolaligimizda o'yin qutisida yoki mobil telefonimizda o'ynagan ilon o'yini esingizdami? Bugun biz 8*8 NeoPixels Matrix yordamida ilon o'yinini yasashni o'rganamiz. Biz Arduino uno -ni boshqaruv markazi va ilonni boshqarish uchun Joystick sindirish moduli sifatida tanlaymiz.

1 -qadam: Komponentlar ro'yxati:

Uskuna:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X moslashuvchan 64 RGB LED 8*8 NeoPixels matritsasi

BKOUT_MD01 - 1 ta Joystick uzilish moduli

3 X qo'llanma chizig'i

Dasturiy ta'minot:

Arduino IDE

2 -qadam: Uskuna ulanishi

NeoPixels -ni D2 piniga ulang.

Joystick uzilish modulidagi "X" Arduino UNO kartasidagi A0 ulanish pinini, "Y" ulanish pinini A1, "K" A2 ulanish pinini.

3 -qadam: dasturlash

P#o'z ichiga oladi

#define PIN 2 // chiqish pin #dexine MAX_LED 64 // boncuk soni uint32_t c; int a = 0, raqam; belgisiz char huan = 0, ci = 0; belgisiz char u = 40; // imzosiz so'zlar guruhining shrift o'lchami char x = 0; imzosiz char Rang [3]; imzosiz 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 ta belgisiz chiroq [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},}; imzosiz belgi [8] = // Yuboriladigan so'zni belgilang {{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 },}; imzosiz char displayscore [8] [8]; int tezligiS = 400; // Ilon int balining boshlang'ich tezligi; // O'yin ballari int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // int SX, SY oziq -ovqat koordinatasi; // ilon boshining koordinatasi int KEY, K; int Yoqilgan; // char sx o'yinini qayta ishga tushirishni yoqish [64]; // Ilon tanasi char sy koordinatasi [64]; Adafruit_NeoPixel tasmasi = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); bekor RANDOM () {A: FX = tasodifiy (0, 7); FY = tasodifiy (0, 7); for (int i = 0; i <3+ball; i ++) // Ilon tanasida oziq -ovqat paydo bo'lishining oldini olish {if (FX == sx && FY == sy ) goto A; }} void myDelay (unsigned int Time) {// Ilon harakatining kechikish davrida biz oziq -ovqat yaltirashi kabi ish qilishimiz va Joystick yo'nalishini o'qishimiz kerak (int t = 1; t 950 && KEY! = 5) { K = 8; } if if (yValue <50 && KEY! = 8) {K = 5; } if if (xValue 950 && KEY! = 4) {K = 6; }} // Bu erda siz klaviatura yo'nalishi ilonning harakat yo'nalishiga qarama -qarshi ekanligini solishtirishingiz mumkin. Agar u qarama -qarshi bo'lsa, klaviaturadan voz keching. /*********************************************** ************************************************ ************************************************ ************************************************ ********/ void gameover () {// Gameover dasturi to'xtatilgach, o'yinni qayta boshlash uchun markaziy tugmani bosing. imzosiz char qiymati, y; Rang [0] = tasodifiy (3, 18); // Rangni o'rnating. Parametr-R G B, diapazoni 0-255. Rang [1] = tasodifiy (3, 18); Rang [2] = tasodifiy (3, 18); c = strip. Color (Rang [1], Rang [0], Rang [2]); qiymat = ball / 10; qiymat = qiymat * 4; y = 0; uchun (son = qiymat; son <qiymat+4; son ++) {uchun (imzosiz char vertikal = 0; vertikal <8; vertikal ++) {displey skori [y] [vertikal] = belgi [son] [vertikal]; } y ++; } qiymat = % 10 ball; qiymat = qiymat * 4; uchun (son = qiymat; son <qiymat+4; son ++) {uchun (imzosiz char vertikal = 0; vertikal <8; vertikal ++) {displey skori [y] [vertikal] = belgi [son] [vertikal]; } y ++; } uchun (belgisiz char gorizontal = 0; gorizontal <8; gorizontal ++) {uchun (imzosiz char vertikal = 0; vertikal <8; vertikal ++) {if (displey skorlari [gorizontal] [vertikal] == 1) // Yorug'lik yoqilgan. {strip.setPixelColor (engil [gorizontal] [vertikal], v); } else strip.setPixelColor (ochiq [gorizontal] [vertikal], 0); }} strip.show (); // Ma'lumotni kechiktirishni yuborish (5000); K = 0; // Joystick yo'nalishini tiklash reset [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Ilon koordinatalari balini tiklash = 0; // O'yin ballari tezligini tiklashS = 400; // Ilonning boshlang'ich tezligi} void setup () {Serial.begin (9600); // kutubxona strip.begin () ni ishga tushiring; // Ma'lumot yuborish. Standart sifatida har bir nuqta rangini 0. Shunday qilib, har bir nuqta boshida yoritilmagan. strip.show (); K = 0; // Joystick sx [0] = 2 yo'nalishini tiklang; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Ilon koordinatalari balini tiklash = 0; // O'yin balini tiklash Rang [0] = tasodifiy (3, 18); // Rangni o'rnating. Parametr-R G B, diapazoni 0-255. Rang [1] = tasodifiy (3, 18); Rang [2] = tasodifiy (3, 18); c = strip. Color (Rang [1], Rang [0], Rang [2]); // Yashil qizil ko'k // Rangni belgilang (raqam = 0; son <24; son ++) {strip.setPixelColor (o'tish [son], c); } strip.show (); // Ma'lumot yuborish kechikishi (2000); Tasodif (); // Oziq -ovqat ishlab chiqarish} void mobile () {KEY = K; // Ilonning har bir harakati yo'nalishni bir marta o'zgartiradi. if (KEY == 8) // Ilon yuqoriga harakat {uchun (int i = 2 + ball; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] - 1; if (sy [0] <0) // Chegaradan nariga o'ting va boshqa tomondan davom eting sy [0] = 7; } if if (KEY == 5) // Ilonning pastga harakatlanishi {uchun (int i = 2 + ball; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] + 1; if (sy [0]> 7) // Chegaradan nariga o'ting va boshqa tomondan davom eting sy [0] = 0; } if if (KEY == 4) // Ilon chap harakat {uchun (int i = 2 + ball; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] - 1; if (sx [0] <0) // Chegaradan nariga o'ting va boshqa tomondan davom eting sx [0] = 7; } if if (KEY == 6) // Ilonning o'ng harakati {uchun (int i = 2 + ball; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] + 1; if (sx [0]> 7) // Chegaradan nariga o'ting va boshqa tomondan davom eting sx [0] = 0; } // Tugma bilan ilon tanasini siljiting} void displeylari () {for (number = 0; number <64; number ++) // Ekranni tozalash {strip.setPixelColor (raqam, 0); } strip.show (); Rang [0] = 40; // Rangni o'rnating. Parametr R G B, diapazoni 0-255. Rang [1] = 0; Rang [2] = 0; c = strip. Color (Rang [1], Rang [0], Rang [2]); // Yashil Qizil Ko'k // Rangni belgilash x = engil [FX] [FY]; // Oziq -ovqat tasmasini ko'rsatish.setPixelColor (x, c); Rang [0] = tasodifiy (3, 18); // Rangni o'rnating. Parametr R G B, diapazoni 0-255. Rang [1] = tasodifiy (3, 18); Rang [2] = tasodifiy (3, 18); c = strip. Color (Rang [1], Rang [0], Rang [2]); // Yashil qizil ko'k // Rangni belgilang (int i = 2 + ball; i> 0; i--) // Ilon tanasini ko'rsatish {x = light [sx [sy ; strip.setPixelColor (x, c); } Rang [0] = 0; // Rangni o'rnating. Parametr R G B, diapazoni 0-255. Rang [1] = 40; Rang [2] = 0; c = strip. Color (Rang [1], Rang [0], Rang [2]); // Yashil qizil ko'k // Rangni belgilash x = yorug'lik [sx [0] [sy [0]; // Ilon boshining tasmasini ko'rsatish.setPixelColor (x, c); strip.show (); // Ma'lumot yuborish} void loop () {mobile (); myDelay (speedS); // Within ichida) - kechikish vaqti. displeylar (); SX = sx [0]; SY = sy [0]; // ilon boshining koordinatasini oling (int i = 1; i <= 2+ball; i ++) {if (SX == sx && SY == sy ) gameover (); } // Ilon boshi uning tanasiga tegdimi, hukm qiling. Agar teginilsa, GameOver -ga o'ting. agar (SY == FY && SX == FX) {RANDOM (); ball ++; Rang [0] = 40; // Rangni o'rnating. Parametr R G B, diapazoni 0-255. Rang [1] = 0; Rang [2] = 0; c = strip. Color (Rang [1], Rang [0], Rang [2]); // Yashil Qizil Ko'k // Rangni belgilash x = engil [FX] [FY]; // Oziq -ovqat tasmasini ko'rsatish.setPixelColor (x, c); strip.show (); // Ma'lumotni yuboring, agar (! (ball 5 %)) {// Hisobga ko'ra ilon tezligini tezlashtiring. Har 5 ta oziq -ovqat, 100 millimetrga ko'payadi. tezlikS = tezlikS - 50; if (speedS <150) // Pastki chegara 200ms. Agar tezlik 200ms dan past bo'lsa, tezlik 200ms bo'lib qoladi. tezlikS = 150; }} // Oziq -ovqat iste'mol qilinadimi -yo'qligini hukm qiling. Agar ilon ovqat iste'mol qilgan bo'lsa, unda ballar ko'payadi va oziq -ovqat tasodifiy ravishda qayta tiklanadi. }

Tajriba natijasi

4 -qadam: tajriba natijasi

Nisbiy o'qishlar:

Bluetooth avtomobil FreaksBot

Birinchi munchoqni Arduino bilan 8*8 NeoPixels matritsasida yoqing

Micro: bit Tajriba 05: RGB LED - Elecfreaks Mirco: bit boshlang'ich to'plami

Juma mahsuloti xabari: LED musiqa chastotali spektrli displeyli lehim to'plami

Aqlli yorug'lik qilish uchun ElecFreaks Micro: bit Tinker to'plamidan foydalaning

Tavsiya: