Kazalo:

Matrica NeoPixels : Igra s kačami: 4 koraki
Matrica NeoPixels : Igra s kačami: 4 koraki

Video: Matrica NeoPixels : Igra s kačami: 4 koraki

Video: Matrica NeoPixels : Igra s kačami: 4 koraki
Video: SKR 1.4 - Основы с новой прошивкой Marlin 2.0.9.1 2024, Julij
Anonim
Matrica NeoPixels: Igra s kačami
Matrica NeoPixels: Igra s kačami

Se še spomnite igre s kačami, ki smo jo v otroštvu igrali na igralni škatli ali mobilnem telefonu? Danes se bomo naučili, kako narediti igro kače z matriko 8*8 NeoPixels. Za nadzorni center izberemo Arduino uno in modul za prekinitev krmilne palice za nadzor kače.

1. korak: Seznam komponent:

Strojna oprema:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X Prilagodljiva 64 RGB LED 8*8 NeoPixels Matrix

1 X Modul za prekinitev krmilne palice BKOUT_MD01

3 X vodilna črta

Programska oprema:

Arduino IDE

2. korak: Povezava strojne opreme

Priključite NeoPixels na pin D2.

"X" na odklopnem modulu igralne palice povežite nožico A0 na plošči Arduino UNO, "Y" priključite nožico A1, "K" priključite nožico A2.

3. korak: Programiranje

P#vključi

#define PIN 2 // Izhodni pin #define MAX_LED 64 // Količina kroglice uint32_t c; int a = 0, število; nepodpisani char huan = 0, ci = 0; nepodpisani znak u = 40; // Velikost pisave skupine besed unsigned char x = 0; barva brez podpisanega znaka [3]; brez podpisa 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 brezznačna znakovna črka [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},}; znak brez znaka [8] = // Nastavite besedo za pošiljanje {{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 },}; podpisan znak brez znakov [8] [8]; int hitrostS = 400; // Začetna hitrost kačjega int score; // rezultat igre int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Koordinata hrane int SX, SY; // Koordinata kačje glave int KEY, K; int Omogočeno; // Omogoči ponovni zagon igre char sx [64]; // Koordinata kačjega telesa char sy [64]; Adafruit_NeoPixel strip = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM () {A: FX = naključno (0, 7); FY = naključno (0, 7); for (int i = 0; i <3+score; i ++) // Prepreči prikaz hrane na kačjem telesu {if (FX == sx && FY == sy ) goto A; }} void myDelay (unsigned int Time) {// V obdobju zakasnitve gibanja kač moramo narediti nekaj podobnega bleščanju hrane in prebrati smer igralne palice za (int t = 1; t 950 && KEY! = 5) { K = 8; } else if (yValue <50 && KEY! = 8) {K = 5; } else if (xValue 950 && KEY! = 4) {K = 6; }} // Tukaj lahko primerjate, ali je smer tipkovnice nasprotna smeri gibanja kače. Če je nasprotno, opustite tipkovnico. /*********************************************** ************************************************ ************************************************ ************************************************ ********/ void gameover () {// Ko se program Gameover ustavi, pritisnite osrednji gumb, da znova zaženete igro. vrednost brez podpisanega znaka, y; Barva [0] = naključno (3, 18); // Nastavi barvo. Parameter je R G B, razpon 0-255. Barva [1] = naključno (3, 18); Barva [2] = naključno (3, 18); c = trak. Barva (Barva [1], Barva [0], Barva [2]); vrednost = rezultat / 10; vrednost = vrednost * 4; y = 0; za (število = vrednost; število <vrednost+4; število ++) {za (nepodpisani navpični znak = 0; navpično <8; navpično ++) {prikazovalnik [y] [navpično] = znak [število] [navpično]; } y ++; } vrednost = rezultat % 10; vrednost = vrednost * 4; za (število = vrednost; število <vrednost+4; število ++) {za (nepodpisani navpični znak = 0; navpično <8; navpično ++) {prikazovalnik [y] [navpično] = znak [število] [navpično]; } y ++; } za (brez podpisanega znaka vodoravno = 0; vodoravno <8; vodoravno ++) {za (brez podpisanega navpičnega znaka navpično = 0; navpično <8; navpično ++) {if (prikazovalnik [vodoravno] [navpično] == 1) // Presodite, ali svetloba je vklopljen. {strip.setPixelColor (svetloba [vodoravna] [navpična], c); } else strip.setPixelColor (svetloba [vodoravna] [navpična], 0); }} strip.show (); // Zakasnitev pošiljanja podatkov (5000); K = 0; // Ponastavi smer igralne palice sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Ponastavi rezultat koordinate kače = 0; // Ponastavi hitrost rezultata igreS = 400; // Začetna hitrost kače} void setup () {Serial.begin (9600); // Inicializirajte knjižnico strip.begin (); // Pošlji podatke. Barva vsake točke je privzeta 0. Tako da vsaka točka na začetku ni osvetljena. strip.show (); K = 0; // Ponastavi smer igralne palice sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Ponastavi rezultat koordinate kače = 0; // Ponastavi rezultat igre Barva [0] = naključno (3, 18); // Nastavi barvo. Parameter je R G B, razpon 0-255. Barva [1] = naključno (3, 18); Barva [2] = naključno (3, 18); c = trak. Barva (Barva [1], Barva [0], Barva [2]); // Zelena Rdeča Modra // Nastavi barvo za (število = 0; število <24; število ++) {strip.setPixelColor (pojdi [število], c); } strip.show (); // Zakasnitev pošiljanja podatkov (2000); NAKLJUČEN(); // proizvaja hrano} void mobile () {KEY = K; // Vsako gibanje kače enkrat spremeni smer. if (KEY == 8) // Gibanje kače navzgor {for (int i = 2 + rezultat; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] - 1; if (sy [0] <0) // Pojdite čez mejo in nadaljujte na drugi strani sy [0] = 7; } else if (KEY == 5) // Zmijoče se gibanje navzdol {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) // Pojdite čez mejo in nadaljujte na drugi strani sy [0] = 0; } else if (KEY == 4) // Kača levo gibanje {for (int i = 2 + rezultat; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] - 1; if (sx [0] <0) // Pojdite čez mejo in nadaljujte na drugi strani sx [0] = 7; } else if (KEY == 6) // Gibanje kače desno {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) // Pojdite čez mejo in nadaljujte na drugi strani sx [0] = 0; } // Premakni telo kače z gumbom} void display () {for (number = 0; number <64; number ++) // Počisti zaslon {strip.setPixelColor (number, 0); } strip.show (); Barva [0] = 40; // Nastavi barvo. Parameter je R G B, razpon 0-255. Barva [1] = 0; Barva [2] = 0; c = trak. Barva (Barva [1], Barva [0], Barva [2]); // Zelena Rdeča Modra // Nastavi barvo x = svetlo [FX] [FY]; // Prikaz traku za hrano.setPixelColor (x, c); Barva [0] = naključno (3, 18); // Nastavi barvo. Parameter je R G B, razpon 0-255. Barva [1] = naključno (3, 18); Barva [2] = naključno (3, 18); c = trak. Barva (Barva [1], Barva [0], Barva [2]); // Zelena Rdeča Modra // Nastavitev barve za (int i = 2 + rezultat; i> 0; i--) // Prikaz kačjega telesa {x = svetlo [sx [sy ; strip.setPixelColor (x, c); } Barva [0] = 0; // Nastavi barvo. Parameter je R G B, razpon 0-255. Barva [1] = 40; Barva [2] = 0; c = trak. Barva (Barva [1], Barva [0], Barva [2]); // Zelena Rdeča Modra // Nastavi barvo x = svetlo [sx [0] [sy [0]; // Prikaz traka kačje glave.setPixelColor (x, c); strip.show (); // Pošlji podatke} void loop () {mobile (); myDelay (speedS); // Znotraj () je čas zakasnitve. zasloni (); SX = sx [0]; SY = sy [0]; // Pridobite koordinato kačje glave za (int i = 1; i <= 2+rezultat; i ++) {if (SX == sx && SY == sy ) gameover (); } // Presodite, ali se je kačja glava dotaknila njenega telesa. Če se dotaknete, pojdite naprej na GameOver. če (SY == FY && SX == FX) {RANDOM (); rezultat ++; Barva [0] = 40; // Nastavi barvo. Parameter je R G B, razpon 0-255. Barva [1] = 0; Barva [2] = 0; c = trak. Barva (Barva [1], Barva [0], Barva [2]); // Zelena Rdeča Modra // Nastavi barvo x = svetlo [FX] [FY]; // Prikaz traku za hrano.setPixelColor (x, c); strip.show (); // Pošljite podatke, če (! (rezultat % 5)) {// Pospešite hitrost kače glede na rezultat. Vsakih 5 zaužitih živil pospešite 100 ms. hitrostS = hitrostS - 50; if (hitrostS <150) // Spodnja meja je 200 ms. Če je hitrost manjša od 200 ms, ostane hitrost 200 ms. hitrostS = 150; }} // Presodite, ali je hrana zaužita. Če je kača jedla hrano, potem plus točke in hrano naključno regenerirajte. }

Rezultat eksperimenta

4. korak: Rezultat poskusa

Relativni odčitki:

Avtomobil FreaksBot Bluetooth

Prižgite prvo kroglico na matriki 8*8 NeoPixels z Arduinom

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

Petek Objava izdelka: Komplet za spajkanje LED -prikazovalnika frekvenčnega spektra

Za izdelavo pametne luči uporabite ElecFreaks Micro: bit Tinker Kit

Priporočena: