Sisällysluettelo:

NeoPixels Matrix : Käärmepeli: 4 vaihetta
NeoPixels Matrix : Käärmepeli: 4 vaihetta

Video: NeoPixels Matrix : Käärmepeli: 4 vaihetta

Video: NeoPixels Matrix : Käärmepeli: 4 vaihetta
Video: How to make your own LED Display 🚥 [WS2812B Neopixel] 2024, Heinäkuu
Anonim
NeoPixels Matrix : Käärmepeli
NeoPixels Matrix : Käärmepeli

Muistatko vielä käärmepelin, jota pelasimme pelilaatikossamme tai kännykällämme lapsuudessamme? Tänään opimme tekemään käärmepelin 8*8 NeoPixels Matrixilla. Valitsemme ohjauskeskukseksi Arduino uno ja käärmeen hallintaan Joystick -katkaisumoduulin.

Vaihe 1: Komponenttiluettelo:

Laitteisto:

1 X Freaduino UNO Rev.2.2 MB_EFUNO

1 X Joustava 64 RGB LED 8*8 NeoPixels Matrix

1 X Joystick -katkaisumoduuli BKOUT_MD01

3 X Ohjainlinja

Ohjelmisto:

Arduino IDE

Vaihe 2: Laitteistoyhteys

Liitä NeoPixels nastaan D2.

"X" ohjaussauvan katkaisumoduulissa liitä nasta A0 Arduino UNO -kortilla, "Y" liitä nasta A1, "K" liitä nasta A2.

Vaihe 3: Ohjelmointi

P#sisältää

#define PIN 2 // Output Pin #define MAX_LED 64 // Helmen määrä uint32_t c; int a = 0, luku; allekirjoittamaton char huan = 0, ci = 0; allekirjoittamaton merkki u = 40; // Sanaryhmän fonttikoko unsigned char x = 0; allekirjoittamaton merkki Väri [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 allekirjoittamatonta merkkivaloa [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] = // Aseta lähetettävä sana {{0, 1, 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 },}; allekirjoittamaton char -näyttöpiste [8] [8]; int nopeusS = 400; // Snake int -pisteen alkunopeus; // Pelin tulos int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Ruoan koordinaatti int SX, SY; // Käärmeen pään koordinaatti int KEY, K; int Käytössä; // Salli pelin uudelleenkäynnistys char sx [64]; // Käärmeen ruumiin koordinaatti char sy [64]; Adafruit_NeoPixel strip = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); mitätön RANDOM () {A: FX = satunnainen (0, 7); FY = satunnainen (0, 7); for (int i = 0; i <3+score; i ++) // Estä ruoan näyttäminen käärmeen kehossa {if (FX == sx && FY == sy ) goto A; }} void myDelay (unsigned int Time) {// Käärmeen liikkeen viivejakson aikana meidän on tehtävä jotain, kuten ruoka glitteriä, ja luettava ohjaussauvan suunta (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; }} // Täällä voit verrata, onko näppäimistön suunta vastakkainen käärmeen liikesuunnan kanssa. Jos se on päinvastainen, luopu näppäimistöstä. /************************************************* ************************************************** ************************************************** ************************************************** ********/ void gameover () {// Kun Gameover -ohjelma on pysähtynyt, käynnistä peli uudelleen painamalla keskinäppäintä. allekirjoittamaton char -arvo, y; Väri [0] = satunnainen (3, 18); // Aseta väri. Parametri on R G B, alue 0-255. Väri [1] = satunnainen (3, 18); Väri [2] = satunnainen (3, 18); c = nauha. Väri (Väri [1], Väri [0], Väri [2]); arvo = pisteet / 10; arvo = arvo * 4; y = 0; for (luku = arvo; luku <arvo+4; luku ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {displaycore [y] [vertical] = character [number] [vertical]; } y ++; } arvo = pisteet % 10; arvo = arvo * 4; for (numero = arvo; luku <arvo+4; luku ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {displaycore [y] [vertical] = character [number] [vertical]; } y ++; } for (unsigned char horisontaalinen = 0; vaakasuuntainen <8; vaakasuuntainen ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {if (displaycore [horisontaalinen] [pystysuora] == 1) // Arvioi, onko valo on päällä. {strip.setPixelColor (vaalea [vaakasuora] [pystysuora], c); } else strip.setPixelColor (vaalea [vaakasuora] [pystysuora], 0); }} strip.show (); // Lähetysviive (5000); K = 0; // Nollaa ohjaussauvan suunta sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Nollaa käärmeen koordinaattipisteet = 0; // Nollaa pelin pisteet speedS = 400; // Snaken alkuperäinen nopeus} void setup () {Serial.begin (9600); // Alusta kirjastokaista.begin (); // Lähetä tietoja. Oletusarvo kunkin pisteen väri on 0. Joten jokainen piste ei ole valaistu alussa. strip.show (); K = 0; // Nollaa ohjaussauvan suunta sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Nollaa käärmeen koordinaattipisteet = 0; // Nollaa pelitulos Väri [0] = satunnainen (3, 18); // Aseta väri. Parametri on R G B, alue 0-255. Väri [1] = satunnainen (3, 18); Väri [2] = satunnainen (3, 18); c = nauha. Väri (Väri [1], Väri [0], Väri [2]); // Vihreä Punainen Sininen // Aseta väri (numero = 0; luku <24; luku ++) {strip.setPixelColor (go [number], c); } strip.show (); // Lähetysviive (2000); RANDOM (); // Tuota ruokaa} void mobile () {KEY = K; // Jokainen käärmeen liike muuttaa suuntaa kerran. if (KEY == 8) // Käärme ylöspäin suuntautuva liike {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) // Siirry rajan yli ja jatka toiselta puolelta sy [0] = 7; } else if (KEY == 5) // Käärme alaspäin suuntautuva liike {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) // Siirry rajan yli ja jatka toiselta puolelta sy [0] = 0; } else if (KEY == 4) // Käärme vasemmalle siirto {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) // Siirry rajan yli ja jatka toiselta puolelta sx [0] = 7; } else if (KEY == 6) // Käärmeen oikea liike {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) // Siirry rajan yli ja jatka toiselta puolelta sx [0] = 0; } // Siirrä käärmeen runkoa painikkeella} void display () {for (number = 0; number <64; number ++) // Tyhjennä näyttö {strip.setPixelColor (numero, 0); } strip.show (); Väri [0] = 40; // Aseta väri. Parametri on R G B, alue 0-255. Väri [1] = 0; Väri [2] = 0; c = nauha. Väri (Väri [1], Väri [0], Väri [2]); // Vihreä Punainen Sininen // Aseta väri x = vaalea [FX] [FY]; // Näytä ruokanauha.setPixelColor (x, c); Väri [0] = satunnainen (3, 18); // Aseta väri. Parametri on R G B, alue 0-255. Väri [1] = satunnainen (3, 18); Väri [2] = satunnainen (3, 18); c = nauha. Väri (Väri [1], Väri [0], Väri [2]); // Vihreä Punainen Sininen // Aseta väri (int i = 2 + pisteet; i> 0; i--) // Näytä käärmeen runko {x = vaalea [sx [sy ; strip.setPixelColor (x, c); } Väri [0] = 0; // Aseta väri. Parametri on R G B, alue 0-255. Väri [1] = 40; Väri [2] = 0; c = nauha. Väri (Väri [1], Väri [0], Väri [2]); // Vihreä Punainen Sininen // Aseta väri x = vaalea [sx [0] [sy [0]; // Näytä käärmeen päänauha.setPixelColor (x, c); strip.show (); // Lähetä tiedot} void loop () {mobile (); myDelay (speedS); // (sisällä) on viiveaika. näytöt (); SX = sx [0]; SY = sy [0]; // Hae käärmeen pään koordinaatti (int i = 1; i <= 2+score; i ++) {if (SX == sx && SY == sy ) gameover (); } // Arvioi, koskiko käärmeen pää ruumiinsa. Jos kosketat, siirry GameOveriin. jos (SY == FY && SX == FX) {RANDOM (); pisteet ++; Väri [0] = 40; // Aseta väri. Parametri on R G B, alue 0-255. Väri [1] = 0; Väri [2] = 0; c = nauha. Väri (Väri [1], Väri [0], Väri [2]); // Vihreä Punainen Sininen // Aseta väri x = vaalea [FX] [FY]; // Näytä ruokanauha.setPixelColor (x, c); strip.show (); // Lähetä tiedot, jos (! (pisteet % 5)) {// Muokkaa käärmeen nopeutta pisteiden mukaan. Joka viides syötävä ruoka, 100 ms. nopeusS = nopeusS - 50; if (speedS <150) // Alaraja on 200 ms. Jos nopeus on alle 200 ms, nopeus pysyy 200 ms. nopeusS = 150; }} // Arvioi syödäänkö ruokaa. Jos käärme söi ruokaa, niin plus pisteet ja regeneroi ruokaa satunnaisesti. }

Kokeilun tulos

Vaihe 4: Kokeilun tulos

Suhteelliset lukemat:

FreaksBot Bluetooth -auto

Sytytä ensimmäinen helmi 8*8 NeoPixels Matrixilla Arduinolla

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

Perjantai Tuotepostaus: LED -musiikkitaajuusspektrin näyttöjuotosarja

Käytä ElecFreaks Micro: bit Tinker Kit -laitetta älykkään valon luomiseen

Suositeltava: