NeoPixelsi maatriks ja madu mäng: 4 sammu
NeoPixelsi maatriks ja madu mäng: 4 sammu
Anonim
NeoPixels Maatriks ja madu mäng
NeoPixels Maatriks ja madu mäng

Kas mäletate veel ussimängu, mida mängisime oma lapsepõlves oma mängukastis või mobiiltelefonis? Täna õpime, kuidas teha madumängu 8*8 NeoPixels Matrix abil. Juhtimiskeskuseks valime Arduino uno ja madu juhtimiseks Joystick breakout mooduli.

Samm: komponentide loend:

Riistvara:

1 X Freaduino UNO Rev.2.2 MB_EFUNO

1 X paindlik 64 RGB LED 8*8 NeoPixels maatriks

1 X Joystick breakout module BKOUT_MD01

3 X Juhtjoon

Tarkvara:

Arduino IDE

Samm: riistvaraühendus

Ühendage NeoPixels pistikuga D2.

"X" juhtkangi katkestusmoodulil ühendage tihvt A0 Arduino UNO plaadil, "Y" ühendage tihvt A1, "K" ühendage tihvt A2.

3. samm: programmeerimine

P#hulka

#define PIN 2 // Output Pin #define MAX_LED 64 // helmeste kogus uint32_t c; int a = 0, arv; allkirjastamata char huan = 0, ci = 0; allkirjastamata sümbol u = 40; // Sõnarühma fondi suurus unsigned char x = 0; allkirjastamata sümbol Värv [3]; allkirjastamata sümbol = {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 allkirjastamata sümbolit [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] = // Määrake saadetav sõna {{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 },}; allkirjastamata sümbol displaycore [8] [8]; int kiirusS = 400; // Madu algkiirus int skoor; // Mängu tulemus int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Toidu koordinaat int SX, SY; // Madupea koordinaat int KEY, K; int Lubatud; // Luba mängu taaskäivitamine char sx [64]; // Madu keha koordinaat char sy [64]; Adafruit_NeoPixel riba = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); tühine RANDOM () {A: FX = juhuslik (0, 7); FY = juhuslik (0, 7); for (int i = 0; i <3+score; i ++) // Vältida toidu kuvamist madu kehal {if (FX == sx && FY == sy ) goto A; }} void myDelay (unsigned int Time) {// Madude liikumise viivitusperioodil peame tegema midagi toidusära taolist ja lugema juhtkangi suunda (int t = 1; t 950 && KEY! = 5) { K = 8; } else if (yVäärtus <50 && KEY! = 8) {K = 5; } else if (xVäärtus 950 && KEY! = 4) {K = 6; }} // Siin saate võrrelda, kas klaviatuuri suund on madu liikumissuunale vastupidine. Kui see on vastupidine, loobuge klaviatuurist. /************************************************ ************************************************* ************************************************* ************************************************* ********/ void gameover () {// Kui Gameoveri programm on peatunud, vajutage mängu taaskäivitamiseks keskset nuppu. allkirjastamata sümbolväärtus, y; Värv [0] = juhuslik (3, 18); // Määra värv. Parameeter on R G B, vahemik 0–255. Värv [1] = juhuslik (3, 18); Värv [2] = juhuslik (3, 18); c = riba. Värv (värv [1], värv [0], värv [2]); väärtus = skoor / 10; väärtus = väärtus * 4; y = 0; jaoks (number = väärtus; arv <väärtus+4; arv ++) {jaoks (allkirjastamata sümbol vertikaalne = 0; vertikaalne <8; vertikaalne ++) {displaycore [y] [vertical] = märk [number] [vertikaalne]; } y ++; } väärtus = skoor % 10; väärtus = väärtus * 4; jaoks (number = väärtus; arv <väärtus+4; arv ++) {jaoks (allkirjastamata sümbol vertikaalne = 0; vertikaalne <8; vertikaalne ++) {displaycore [y] [vertical] = märk [number] [vertikaalne]; } y ++; } jaoks (allkirjastamata sümbol horisontaalne = 0; horisontaalne <8; horisontaalne ++) {jaoks (allkirjastamata sümbol vertikaalne = 0; vertikaalne <8; vertikaalne ++) {if (displaycore [horisontaalne] [vertikaalne] == 1) // Otsustage, kas valgus on sisse lülitatud. {strip.setPixelColor (hele [horisontaalne] [vertikaalne], c); } else strip.setPixelColor (hele [horisontaalne] [vertikaalne], 0); }} strip.show (); // Andmete saatmise viivitus (5000); K = 0; // Lähtesta juhtkangi suund sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Lähtesta madu koordinaatide skoor = 0; // Lähtesta mängu skoor speedS = 400; // Madu algkiirus} void setup () {Serial.begin (9600); // Raamatukogu riba initsialiseerimine.begin (); // Andmete saatmine. Vaikimisi on iga punkti värv 0. Seega ei ole iga punkt alguses valgustatud. strip.show (); K = 0; // Joysticki suuna lähtestamine sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Lähtesta madu koordinaatide skoor = 0; // Lähtesta mängu tulemus Värv [0] = juhuslik (3, 18); // Määra värv. Parameeter on R G B, vahemik 0–255. Värv [1] = juhuslik (3, 18); Värv [2] = juhuslik (3, 18); c = riba. Värv (värv [1], värv [0], värv [2]); // Roheline Punane Sinine // Määra värv (number = 0; number <24; number ++) {strip.setPixelColor (mine [number], c); } strip.show (); // Andmete saatmise viivitus (2000); RANDOM (); // Toota toitu} void mobile () {KEY = K; // Iga madu liigutus muudab suuna korraks. kui (KEY == 8) // Madu ülespoole liikumine {jaoks (int i = 2 + skoor; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] - 1; if (sy [0] <0) // Mine piirist kaugemale ja jätka teisel pool sy [0] = 7; } else if (KEY == 5) // Madu allapoole liikumine {jaoks (int i = 2 + skoor; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] + 1; if (sy [0]> 7) // Mine piirist kaugemale ja jätka teisel pool sy [0] = 0; } else if (KEY == 4) // Madu vasakule liikumine {jaoks (int i = 2 + skoor; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] - 1; if (sx [0] <0) // Mine piirist kaugemale ja jätka teisel pool sx [0] = 7; } else if (KEY == 6) // Madu paremale liikumine {jaoks (int i = 2 + skoor; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] + 1; if (sx [0]> 7) // Mine piirist kaugemale ja jätka teisel pool sx [0] = 0; } // Liiguta madu keha nupuga} tühjad kuvab () {for (number = 0; number <64; number ++) // Kustuta ekraan {strip.setPixelColor (number, 0); } strip.show (); Värv [0] = 40; // Määra värv. Parameeter on R G B, vahemik 0–255. Värv [1] = 0; Värv [2] = 0; c = riba. Värv (värv [1], värv [0], värv [2]); // Roheline Punane Sinine // Määra värv x = hele [FX] [FY]; // Kuva toiduriba.setPixelColor (x, c); Värv [0] = juhuslik (3, 18); // Määra värv. Parameeter on R G B, vahemik 0–255. Värv [1] = juhuslik (3, 18); Värv [2] = juhuslik (3, 18); c = riba. Värv (värv [1], värv [0], värv [2]); // Roheline Punane Sinine // Määra värv (int i = 2 + skoor; i> 0; i--) // Kuva madu keha {x = hele [sx [sy ; strip.setPixelColor (x, c); } Värv [0] = 0; // Määra värv. Parameeter on R G B, vahemik 0–255. Värv [1] = 40; Värv [2] = 0; c = riba. Värv (värv [1], värv [0], värv [2]); // Roheline Punane Sinine // Määra värv x = hele [sx [0] [sy [0]; // Kuva ussipea riba.setPixelColor (x, c); strip.show (); // Saada andmed} void loop () {mobile (); myDelay (speedS); // Within piires) on viivitusaeg. kuvab (); SX = sx [0]; SY = sy [0]; // Hangi madu pea koordinaat (int i = 1; i <= 2+score; i ++) {if (SX == sx && SY == sy ) gameover (); } // Otsustage, kas madu pea puudutas keha. Kui puudutate, siis suunake edasi GameOveri. if (SY == FY && SX == FX) {RANDOM (); skoor ++; Värv [0] = 40; // Määra värv. Parameeter on R G B, vahemik 0–255. Värv [1] = 0; Värv [2] = 0; c = riba. Värv (värv [1], värv [0], värv [2]); // Roheline Punane Sinine // Määra värv x = hele [FX] [FY]; // Kuva toiduriba.setPixelColor (x, c); strip.show (); // Saada andmed, kui (! (skoor % 5)) {// Koostage madu kiirus vastavalt skoorile. Iga 5 söödud toidu kohta koguneb 100 ms. kiirusS = kiirusS - 50; if (speedS <150) // Alumine piir on 200 ms. Kui kiirus on väiksem kui 200 ms, jääb kiirus 200 ms. kiirusS = 150; }} // Otsustage, kas toitu süüakse. Kui madu sõi toitu, siis pluss skoor ja uuendage toitu juhuslikult. }

Katse tulemus

4. samm: katse tulemus

Suhtelised näidud:

FreaksBot Bluetooth -auto

Süütage esimene helmes 8*8 NeoPixels maatriksil koos Arduinoga

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

Reede tootepostitus: LED -muusika sagedusspektri ekraaniga jootekomplekt

Kasutage nutika valguse loomiseks ElecFreaks Micro: bit Tinker Kit

Soovitan: