Talaan ng mga Nilalaman:

NeoPixels Matrix : Laro ng Ahas: 4 na Hakbang
NeoPixels Matrix : Laro ng Ahas: 4 na Hakbang

Video: NeoPixels Matrix : Laro ng Ahas: 4 na Hakbang

Video: NeoPixels Matrix : Laro ng Ahas: 4 na Hakbang
Video: How to Diffuse Neopixels - LED Diffusion Material Reference Guide #adafruit 2024, Hulyo
Anonim
NeoPixels Matrix : Laro ng Ahas
NeoPixels Matrix : Laro ng Ahas

Naaalala mo pa ba ang laro ng ahas na nilalaro natin sa aming game box o mobile sa panahon ng ating pagkabata? Ngayon ay matututunan natin kung paano gumawa ng isang laro ng ahas na may 8 * 8 NeoPixels Matrix. Pinipili namin ang Arduino uno bilang control center at Joystick breakout module upang makontrol ang ahas.

Hakbang 1: Listahan ng Mga Bahagi:

Hardware:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X Flexible 64 RGB LED 8 * 8 NeoPixels Matrix

1 X Joystick breakout module BKOUT_MD01

3 X Linya ng Gabay

Software:

Arduino IDE

Hakbang 2: Koneksyon sa Hardware

Ikonekta ang NeoPixels upang i-pin ang D2.

"X" sa Joystick breakout module ikonekta ang pin A0 sa Arduino UNO board, "Y" ikonekta ang pin A1, "K" ikonekta ang pin A2.

Hakbang 3: Programming

P # isama

#define PIN 2 // Pin ng Output # tukuyin MAX_LED 64 // Dami ng bead uint32_t c; int a = 0, numero; unsigned char huan = 0, ci = 0; unsigned char u = 40; // Ang laki ng font ng pangkat ng salita na hindi pinirmahan char x = 0; unsigned char Kulay [3]; unsigned 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 unsigned char light [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] = // Itakda ang salitang ipapadala sa {{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}, // 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, 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, 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, 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 },}; unsigned char displaycore [8] [8]; int bilisS = 400; // Paunang bilis ng iskor ng int int; // Game score int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Coordinate of food int SX, SY; // Coordinate of ahas ulo int SUSI, K; int Pinagana; // Paganahin upang i-restart ang laro char sx [64]; // Coordinate of ahas katawan char sy [64]; Adafruit_NeoPixel strip = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); walang bisa RANDOM () {A: FX = random (0, 7); FY = random (0, 7); para sa (int i = 0; i <3 + iskor; i ++) // Pigilan ang pagpapakita ng pagkain sa katawan ng ahas {kung (FX == sx && FY == sy ) goto A; }} void myDelay (unsigned int Time) {// Sa panahon ng pagka-antala ng paggalaw ng ahas, kailangan nating gumawa ng isang bagay tulad ng kuminang ng pagkain at basahin ang direksyon ng Joystick para sa (int t = 1; t 950 && KEY! = 5) { K = 8; } iba pa kung (yValue <50 && KEY! = 8) {K = 5; } iba pa kung (xValue 950 && KEY! = 4) {K = 6; }} // Dito maaari mong ihambing kung ang direksyon ng keypad ay kabaligtaran ng direksyong paglipat ng ahas. Kung ito ay nasa tapat, pagkatapos ay isuko ang keypad. / ***** ***** ***** ***** ******** / void gameover () {// Kapag ang programa ng Gameover ay tumigil, pindutin ang gitnang pindutan upang muling simulan ang laro. hindi naka-sign na halaga ng char, y; Kulay [0] = random (3, 18); // Set color. Parameter ay R G B, saklaw 0-255. Kulay [1] = random (3, 18); Kulay [2] = random (3, 18); c = strip. Kulay (Kulay [1], Kulay [0], Kulay [2]); halaga = iskor / 10; halaga = halaga * 4; y = 0; para sa (numero = halaga; numero <halaga + 4; numero ++) {para sa (unsigned char vertikal = 0; patayo <8; patayo ++) {ipinapakita [y] [patayo] = character [numero] [patayo]; } y ++; } halaga = puntos% 10; halaga = halaga * 4; para sa (numero = halaga; numero <halaga + 4; numero ++) {para sa (unsigned char vertikal = 0; patayo <8; patayo ++) {ipinapakita [y] [patayo] = character [numero] [patayo]; } y ++; } para sa (unsigned char pahalang = 0; pahalang <8; pahalang ++) {para sa (unsigned char patayo = 0; patayo <8; patayo ++) {kung (ipinapakita [pahalang] [patayong] == 1) // Hukom kung ang ilaw ay nasa. {strip.setPixelColor (ilaw [pahalang] [patayo], c); } iba pa strip.setPixelColor (ilaw [pahalang] [patayo], 0); }} strip.show (); // Magpadala ng pagkaantala ng data (5000); K = 0; // Reset Joystick direction sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // I-reset ang iskor ng coordinate ng ahas = 0; // Reset speed game scoreS = 400; // Ang paunang bilis ng ahas} walang bisa ang pag-setup () {Serial.begin (9600); // Initialize library strip.begin (); // Magpadala ng data. Default ang kulay ng bawat punto bilang 0. Kaya't ang bawat punto ay hindi naiilawan sa simula. strip.show (); K = 0; // I-reset ang direksyon ng Joystick sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // I-reset ang iskor ng coordinate ng ahas = 0; // I-reset ang marka ng laro Kulay [0] = random (3, 18); // Set color. Parameter ay R G B, saklaw 0-255. Kulay [1] = random (3, 18); Kulay [2] = random (3, 18); c = strip. Kulay (Kulay [1], Kulay [0], Kulay [2]); // Green Red Blue // Itakda ang kulay para sa (number = 0; number <24; number ++) {strip.setPixelColor (go [number], c); } strip.show (); // Magpadala ng pagkaantala ng data (2000); RANDOM (); // Gumawa ng pagkain} walang bisa ang mobile () {KEY = K; // Ang bawat paggalaw ng ahas ay nagbabago ng direksyon nang isang beses. kung (KEY == 8) // Snake pataas na paggalaw {para sa (int i = 2 + iskor; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sy [0] = sy [0] - 1; kung (sy [0] <0) // Lumampas sa hangganan at magpatuloy sa kabilang panig sy [0] = 7; } iba pa kung (KEY == 5) // Snake pababang paggalaw {para sa (int i = 2 + iskor; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sy [0] = sy [0] + 1; kung (sy [0]> 7) // Lumampas sa hangganan at magpatuloy sa kabilang panig sy [0] = 0; } iba pa kung (KEY == 4) // Snake left kilusan {para (int i = 2 + iskor; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sx [0] = sx [0] - 1; kung (sx [0] <0) // Lumampas sa hangganan at magpatuloy sa kabilang panig sx [0] = 7; } iba pa kung (KEY == 6) // Snake right kilusan {para (int i = 2 + iskor; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sx [0] = sx [0] + 1; kung (sx [0]> 7) // Lumampas sa hangganan at magpatuloy sa kabilang panig sx [0] = 0; } // Ilipat ang katawan ng ahas na may pindutan} mga walang bisa na pagpapakita () {para sa (number = 0; number <64; number ++) // I-clear ang screen {strip.setPixelColor (number, 0); } strip.show (); Kulay [0] = 40; // Itakda ang kulay. Ang parameter ay R G B, saklaw ng 0-255. Kulay [1] = 0; Kulay [2] = 0; c = strip. Kulay (Kulay [1], Kulay [0], Kulay [2]); // Green Red Blue // Set color x = light [FX] [FY]; // Display food strip.setPixelColor (x, c); Kulay [0] = random (3, 18); // Itakda ang kulay. Ang parameter ay R G B, saklaw ng 0-255. Kulay [1] = random (3, 18); Kulay [2] = random (3, 18); c = strip. Kulay (Kulay [1], Kulay [0], Kulay [2]); // Green Red Blue // Itakda ang kulay para sa (int i = 2 + iskor; i> 0; i--) // Ipakita ang katawan ng ahas {x = light [sx [sy ; strip.setPixelColor (x, c); } Kulay [0] = 0; // Itakda ang kulay. Ang parameter ay R G B, saklaw ng 0-255. Kulay [1] = 40; Kulay [2] = 0; c = strip. Kulay (Kulay [1], Kulay [0], Kulay [2]); // Green Red Blue // Set color x = light [sx [0] [sy [0]; // Ipakita ang strip ng ulo ng ahas.setPixelColor (x, c); strip.show (); // Magpadala ng data} void loop () {mobile (); myDelay (bilisS); // Sa loob ng () ay oras ng pagkaantala. ipinapakita (); SX = sx [0]; SY = sy [0]; // Kumuha ng koordinasyon ng ulo ng ahas para sa (int i = 1; i <= 2 + iskor; i ++) {if (SX == sx && SY == sy ) gameover (); } // Hukom kung hinawakan ng ulo ng ahas ang katawan nito. Kung hinawakan, pagkatapos ay ipasa ang GameOver. kung (SY == FY && SX == FX) {RANDOM (); puntos ++; Kulay [0] = 40; // Itakda ang kulay. Ang parameter ay R G B, saklaw ng 0-255. Kulay [1] = 0; Kulay [2] = 0; c = strip. Kulay (Kulay [1], Kulay [0], Kulay [2]); // Green Red Blue // Set color x = light [FX] [FY]; // Display strip ng pagkain.setPixelColor (x, c); strip.show (); // Magpadala ng data kung (! (puntos% 5)) {// I-accerlerate ang bilis ng ahas ayon sa iskor. Ang bawat 5 pagkain na kinakain, accerlerate 100ms. bilisS = bilisS - 50; kung (speedS <150) // Ang ilalim na limitasyon ay 200ms. Kung ang bilis na mas mababa sa 200ms, ang bilis ay mananatili ng 200ms. bilisS = 150; }} // Hukom kung kinakain ang pagkain. Kung ang ahas ay kumain ng pagkain, pagkatapos ay magdagdag ng mga marka at muling buhayin ang pagkain nang sapalaran. }

Resulta ng Eksperimento

Hakbang 4: Resulta ng Eksperimento

Mga Kamag-anak na Pagbasa:

FreaksBot Bluetooth Car

Banayad ang Unang Bead sa 8 * 8 NeoPixels Matrix kasama si Arduino

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

Biyernes ng Produkto ng Produkto: LED Music Frequency Spectrum Display Soldering Kit

Gumamit ng ElecFreaks Micro: bit Tinker Kit upang Gumawa ng Isang Smart Light

Inirerekumendang: