Sisukord:

NeoPixelsi maatriks ja madu mäng: 4 sammu
NeoPixelsi maatriks ja madu mäng: 4 sammu

Video: NeoPixelsi maatriks ja madu mäng: 4 sammu

Video: NeoPixelsi maatriks ja madu mäng: 4 sammu
Video: NeoPixel Matrix test with FastLED 2024, November
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: