Агуулгын хүснэгт:

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 матриц ашиглан могойн тоглоом хийхийг сурах болно. Бид Arduino uno -ийг хяналтын төв болгон сонгож, могойг хянахын тулд Joystick -ийн таслах модулийг сонгоно.

Алхам 1: Бүрэлдэхүүн хэсгүүдийн жагсаалт:

Техник хангамж:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X уян хатан 64 RGB LED 8*8 NeoPixels матриц

1 X Joystick таслах модуль BKOUT_MD01

3 X чиглүүлэгч шугам

Програм хангамж:

Arduino IDE

Алхам 2: Тоног төхөөрөмжийн холболт

NeoPixels -ийг D2 зүү рүү холбоно уу.

Joystick таслах модуль дээрх "X" нь Arduino UNO самбар дээрх A0 зүү, "Y" холболтын зүү A1, "K" холболтын зүү А2.

Алхам 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},}; гарын үсэггүй char тэмдэгт [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 },}; гарын үсэггүй char дэлгэцийн оноо [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); хүчингүй RANDOM () {A: FX = санамсаргүй (0, 7); FY = санамсаргүй (0, 7); for (int i = 0; i <3+оноо; i ++) // Могойн биед хоол хүнс харуулахаас урьдчилан сэргийлэх {if (FX == sx && FY == sy ) goto A; }} void myDelay (unsigned int Time) {// Могойн хөдөлгөөн удаашрах үед бид хоол хүнс гялалзуулах гэх мэт зүйлийг хийж, Joystick -ийн чиглэлийг унших ёстой (int t = 1; t 950 && KEY! = 5) { K = 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 = зурвас Өнгө (Өнгө [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 ++; } for (тэмдэггүй char хэвтээ = 0; хэвтээ <8; хэвтээ ++) {for (тэмдэггүй тэмдэг босоо = 0; босоо <8; босоо ++) {if (дэлгэцийн оноо [хэвтээ] [босоо] == 1) // Гэрэл байгаа эсэхийг шүүх асаалттай байна. {strip.setPixelColor (цайвар [хэвтээ] [босоо], в); } else strip.setPixelColor (цайвар [хэвтээ] [босоо], 0); }} strip.show (); // Өгөгдлийн саатал илгээх (5000); K = 0; // Joystick -ийн чиглэлийг дахин тохируулах sx [0] = 2; схем [1] = 1; схем [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Могойн координатын оноог дахин тохируулах = 0; // Тоглоомын онооны хурдыг дахин тохируулахS = 400; // Могойн анхны хурд} void setup () {Serial.begin (9600); // Номын сангийн зурвасыг эхлүүлэх.begin (); // Мэдээлэл илгээх. Анхаарах цэг бүрийн өнгийг 0 болгоно. Тиймээс цэг бүрийг эхэнд нь гэрэлтүүлдэггүй. strip.show (); K = 0; // Joystick sx -ийн чиглэлийг дахин тохируулах sx [0] = 2; схем [1] = 1; схем [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 = зурвас Өнгө (Өнгө [1], Өнгө [0], Өнгө [2]); // Ногоон улаан цэнхэр // Өнгийг тохируулах (тоо = 0; тоо <24; тоо ++) {strip.setPixelColor (явах [тоо], в); } 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; } 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 = зурвас Өнгө (Өнгө [1], Өнгө [0], Өнгө [2]); // Ногоон Улаан Цэнхэр // Өнгийг тохируулах x = гэрэл [FX] [FY]; // Хоолны зурвасыг харуулах.setPixelColor (x, c); Өнгө [0] = санамсаргүй (3, 18); // Өнгийг тохируулах. Параметр нь R G B, 0-255 хооронд байна. Өнгө [1] = санамсаргүй (3, 18); Өнгө [2] = санамсаргүй (3, 18); c = зурвас Өнгө (Өнгө [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 = зурвас Өнгө (Өнгө [1], Өнгө [0], Өнгө [2]); // Ногоон Улаан Цэнхэр // Өнгийг тохируулах x = гэрэл [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+оноо; 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 = зурвас Өнгө (Өнгө [1], Өнгө [0], Өнгө [2]); // Ногоон Улаан Цэнхэр // Өнгийг тохируулах x = гэрэл [FX] [FY]; // Хоолны зурвасыг харуулах.setPixelColor (x, c); strip.show (); // Хэрэв (! (оноо % 5)) {// онооны дагуу могойн хурдыг хурдасгах бол өгөгдөл илгээх. Идсэн 5 хоол хүнс тутамд 100мм нэмэгддэг. хурдS = хурдS - 50; if (speedS <150) // Доод хязгаар нь 200ms. Хэрэв хурд нь 200 м -ээс бага байвал хурд нь 200 м хэвээр байх болно. хурд S = 150; }} // Хоол идсэн эсэхийг шүүнэ үү. Хэрэв могой хоол идсэн бол оноо нэмж, хоол хүнсээ санамсаргүй байдлаар сэргээдэг. }

Туршилтын үр дүн

Алхам 4: Туршилтын үр дүн

Харьцангуй уншилт:

FreaksBot Bluetooth машин

Ардуинотой 8*8 NeoPixels матриц дээр анхны ирмэгийг асаана уу

Бичил: битийн туршилт 05: RGB LED - Elecfreaks Mirco: bit Starter Kit Course

Баасан гарагийн бүтээгдэхүүний бичлэг: LED хөгжмийн давтамжийн спектрийн дэлгэцийн гагнуурын хэрэгсэл

Ухаалаг гэрэл хийхийн тулд ElecFreaks Micro: bit Tinker Kit -ийг ашиглаарай

Зөвлөмж болгож буй: