INHOUDSOPGAWE:

NeoPixels Matrix : Slangspel: 4 stappe
NeoPixels Matrix : Slangspel: 4 stappe

Video: NeoPixels Matrix : Slangspel: 4 stappe

Video: NeoPixels Matrix : Slangspel: 4 stappe
Video: Pixel Dust on RGB Matrix displays 2024, Desember
Anonim
NeoPixels Matrix : Slangspel
NeoPixels Matrix : Slangspel

Onthou jy nog die slangetjie wat ons tydens ons kinderjare op ons boks of selfoon gespeel het? Vandag gaan ons leer hoe om 'n slangspel te maak met 8*8 NeoPixels Matrix. Ons kies Arduino uno as die beheersentrum en die joystick -uitbreekmodule om die slang te beheer.

Stap 1: Komponentelys:

Hardeware:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X Buigsame 64 RGB LED 8*8 NeoPixels Matrix

1 X Joystick -uitbreekmodule BKOUT_MD01

3 X gidslyn

Sagteware:

Arduino IDE

Stap 2: Hardewareverbinding

Koppel NeoPixels aan pin D2.

"X" op joystick -uitbreekmodule verbind pen A0 op Arduino UNO -bord, "Y" aansluitpen A1, "K" aansluitpen A2.

Stap 3: Programmering

P#insluit

#definieer PIN 2 // Uitvoerpen #definieer MAX_LED 64 // Hoeveelheid kraal uint32_t c; int a = 0, getal; ongetekende char huan = 0, ci = 0; ongetekende teken u = 40; // Die lettergrootte van die woordgroep ongeteken char x = 0; ongetekende char Kleur [3]; ongetekende 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 ongetekende 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] = // Stel die woord wat gestuur moet word {{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 },}; ongetekende char displayscore [8] [8]; int spoedS = 400; // Aanvanklike snelheid van slang int telling; // Speletelling int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Koördinaat van voedsel int SX, SY; // Koördinaat van slangkop int KEY, K; int aangeskakel; // Aktiveer om game char sx [64] weer te begin; // Koördinaat van slangliggaam [64]; Adafruit_NeoPixel strip = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); nietig RANDOM () {A: FX = random (0, 7); FY = ewekansig (0, 7); for (int i = 0; i <3+telling; i ++) // Voorkom voedselvertoning op slangliggaam {if (FX == sx && FY == sy ) gaan na A; }} void myDelay (ongetekende int -tyd) {// Gedurende die vertragingsperiode van slangbeweging moet ons iets soos voedselglans doen en die rigting van die joystick lees vir (int t = 1; t 950 && KEY! = 5) { K = 8; } anders as (yValue <50 && KEY! = 8) {K = 5; } anders as (xValue 950 && KEY! = 4) {K = 6; }}} // Hier kan u vergelyk of die rigting van die bedieningspaneel teenoorgestelde is as die rigting van die slang. As dit teenoorgestelde is, moet u die toetsbord weggee. /************************************************ ************************************************* ************************************************* ************************************************* ********/ void gameover () {// Sodra die Gameover -program gestop is, druk die sentrale knoppie om die spel weer te begin. ongetekende char waarde, y; Kleur [0] = ewekansig (3, 18); // Stel kleur in. Parameter is R G B, reeks 0-255. Kleur [1] = ewekansig (3, 18); Kleur [2] = ewekansig (3, 18); c = strook. Kleur (Kleur [1], Kleur [0], Kleur [2]); waarde = telling / 10; waarde = waarde * 4; y = 0; vir (getal = waarde; getal <waarde+4; getal ++) {vir (ongetekende karakter vertikaal = 0; vertikaal <8; vertikaal ++) {displayscore [y] [vertikaal] = karakter [getal] [vertikaal]; } y ++; } waarde = telling % 10; waarde = waarde * 4; vir (getal = waarde; getal <waarde+4; getal ++) {vir (ongetekende karakter vertikaal = 0; vertikaal <8; vertikaal ++) {displayscore [y] [vertikaal] = karakter [getal] [vertikaal]; } y ++; } vir (ongeteken teken horisontaal = 0; horisontaal <8; horisontaal ++) {vir (ongetekende karakter vertikaal = 0; vertikaal <8; vertikaal ++) {if (displayscore [horisontaal] [vertikaal] == 1) // Beoordeel of die lig is aan. {strip.setPixelColor (lig [horisontaal] [vertikaal], c); } anders strip.setPixelColor (lig [horisontaal] [vertikaal], 0); }} strip.show (); // Stuur datavertraging (5000); K = 0; // Stel joystickrigting sx [0] = 2 terug; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Stel slangkoördinaat -telling terug = 0; // Stel die snelheid van die spel telling S = 400 terug; // Die aanvanklike snelheid van die slang} leemte -opstelling () {Serial.begin (9600); // Initialiseer biblioteek strip.begin (); // Stuur data. Verander die kleur van elke punt as 0. Elke punt word dus nie aan die begin belig nie. strip.show (); K = 0; // Stel die rigting van die joystick sx [0] = 2 terug; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Herstel die slangkoördinaat telling = 0; // Herstel spel telling Kleur [0] = ewekansig (3, 18); // Stel kleur in. Parameter is R G B, reeks 0-255. Kleur [1] = ewekansig (3, 18); Kleur [2] = ewekansig (3, 18); c = strook. Kleur (Kleur [1], Kleur [0], Kleur [2]); // Groen Rooi Blou // Stel kleur in vir (getal = 0; getal <24; getal ++) {strip.setPixelColor (gaan [nommer], c); } strip.show (); // Stuur datavertraging (2000); RANDOM (); // Produseer voedsel} void mobile () {SLEUTEL = K; // Elke beweging van die slang laat die rigting vir 'n slag verander. as (SLEUTEL == 8) // Slang opwaartse beweging {vir (int i = 2 + telling; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] - 1; if (sy [0] <0) // Gaan oor die grens en gaan aan die ander kant sy [0] = 7; } anders as (KEY == 5) // Slang afwaartse beweging {vir (int i = 2 + telling; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] + 1; if (sy [0]> 7) // Gaan oor die grens en gaan aan die ander kant sy [0] = 0; } anders as (SLEUTEL == 4) // Slang links beweging {vir (int i = 2 + telling; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] - 1; if (sx [0] <0) // Gaan oor die grens en gaan aan die ander kant sx [0] = 7; } anders as (SLEUTEL == 6) // Slangregte beweging {vir (int i = 2 + telling; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] + 1; if (sx [0]> 7) // Gaan oor die grens en gaan aan die ander kant sx [0] = 0; } // Beweeg slangliggaam met knoppie} leë skerms () {vir (getal = 0; getal <64; getal ++) // Maak die skerm skoon {strip.setPixelColor (getal, 0); } strip.show (); Kleur [0] = 40; // Stel kleur. Parameter is R G B, reeks 0-255. Kleur [1] = 0; Kleur [2] = 0; c = strook. Kleur (Kleur [1], Kleur [0], Kleur [2]); // Groen rooi blou // Stel kleur x = lig [FX] [FY]; // Wys voedselstrook.setPixelColor (x, c); Kleur [0] = ewekansig (3, 18); // Stel kleur. Parameter is R G B, reeks 0-255. Kleur [1] = ewekansig (3, 18); Kleur [2] = ewekansig (3, 18); c = strook. Kleur (Kleur [1], Kleur [0], Kleur [2]); // Groen Rooi Blou // Stel kleur in vir (int i = 2 + telling; i> 0; i--) // Vertoon slangliggaam {x = lig [sx [sy ; strip.setPixelColor (x, c); } Kleur [0] = 0; // Stel kleur. Parameter is R G B, reeks 0-255. Kleur [1] = 40; Kleur [2] = 0; c = strook. Kleur (Kleur [1], Kleur [0], Kleur [2]); // Groen Rooi Blou // Stel kleur x = lig [sx [0] [sy [0]; // Vertoon slangkopstrook.setPixelColor (x, c); strip.show (); // Stuur data} leemte -lus () {mobile (); myDelay (speedS); // Binne () is vertragingstyd. vertoon (); SX = sx [0]; SY = sy [0]; // Kry koördinaat van slangkop vir (int i = 1; i <= 2+telling; i ++) {if (SX == sx && SY == sy ) gameover (); } // Beoordeel of die slangkop aan sy liggaam geraak het. As dit aangeraak word, stuur dan na GameOver. as (SY == FY && SX == FX) {RANDOM (); telling ++; Kleur [0] = 40; // Stel kleur. Parameter is R G B, reeks 0-255. Kleur [1] = 0; Kleur [2] = 0; c = strook. Kleur (Kleur [1], Kleur [0], Kleur [2]); // Groen rooi blou // Stel kleur x = lig [FX] [FY]; // Wys voedselstrook.setPixelColor (x, c); strip.show (); // Stuur data as (! (telling % 5)) {// Versnel slangspoed volgens die telling. Versamel elke 5 kosse 100 ms. spoedS = spoedS - 50; if (speedS <150) // Die onderste limiet is 200 ms. As die spoed laer is as 200 ms, bly die spoed 200 ms. spoed S = 150; }}} // Beoordeel of voedsel geëet word. As die slang kos geëet het, tel dan die tellings op en genereer voedsel lukraak. }

Eksperimentresultaat

Stap 4: Eksperimentresultaat

Relatiewe lesings:

FreaksBot Bluetooth -motor

Steek die eerste kraal aan op 8*8 NeoPixels Matrix met Arduino

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

Vrydag -produkpos: LED -musiekfrekwensiespektrum -soldeerstel vir skerms

Gebruik ElecFreaks Micro: bit Tinker Kit om 'n slim lig te maak

Aanbeveel: