Innehållsförteckning:

NeoPixels Matrix : Ormspel: 4 steg
NeoPixels Matrix : Ormspel: 4 steg

Video: NeoPixels Matrix : Ormspel: 4 steg

Video: NeoPixels Matrix : Ormspel: 4 steg
Video: Pixel Dust on RGB Matrix displays 2024, November
Anonim
NeoPixels Matrix : Ormspel
NeoPixels Matrix : Ormspel

Kommer du fortfarande ihåg ormspel som vi spelade på vår låda eller mobil under vår barndom? Idag ska vi lära oss hur man gör ett ormspel med 8*8 NeoPixels Matrix. Vi väljer Arduino uno som kontrollcenter och styrspakmodul för styrning av ormen.

Steg 1: Komponentlista:

Hårdvara:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X Flexibel 64 RGB LED 8*8 NeoPixels Matrix

1 X Joystick -brytningsmodul BKOUT_MD01

3 X guidelinje

Programvara:

Arduino IDE

Steg 2: Maskinvaruanslutning

Anslut NeoPixels till stift D2.

"X" på joystick -brytningsmodul Anslut stift A0 på Arduino UNO -kort, "Y" Anslut stift A1, "K" Anslut stift A2.

Steg 3: Programmering

P#inkluderar

#define PIN 2 // Output Pin #define MAX_LED 64 // Antal pärlor uint32_t c; int a = 0, tal; osignerad char huan = 0, ci = 0; osignerad tecken u = 40; // Teckensnittsstorleken för ordgruppen osignerad tecken x = 0; osignerad röding Färg [3]; osignerad 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 osignerade teckenlampor [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},}; osignerat tecken [8] = // Ställ in det ord som ska skickas {{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 },}; osignerad char visar poäng [8] [8]; int hastighetS = 400; // Initial hastighet av orm int poäng; // Spelpoäng int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Koordinat för mat int SX, SY; // Koordinat för ormhuvud int KEY, K; int Aktiverat; // Aktivera för att starta om spel char sx [64]; // Koordinat för ormkroppssy [64]; Adafruit_NeoPixel strip = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM () {A: FX = slumpmässig (0, 7); FY = slumpmässig (0, 7); för (int i = 0; i <3+poäng; i ++) // Förhindra att mat visas på ormkroppen {if (FX == sx && FY == sy ) gå till A; }} void myDelay (unsigned int Time) {// Under fördröjningsperioden för ormrörelser måste vi göra något som matglitter och läsa styrspaken för (int t = 1; t 950 && KEY! = 5) { K = 8; } annat om (yValue <50 && KEY! = 8) {K = 5; } annat om (xValue 950 && KEY! = 4) {K = 6; }}} // Här kan du jämföra om knappsatsens riktning är motsatt ormens rörelseriktning. Om det är motsatt, ge upp knappsatsen. /************************************************* ************************************************** ************************************************** ************************************************** ********/ void gameover () {// När Gameover -programmet har stoppats trycker du på den centrala knappen för att starta om spelet. osignerat rödningsvärde, y; Färg [0] = slumpmässig (3, 18); // Ställ in färg. Parameter är R G B, intervall 0-255. Färg [1] = slumpmässig (3, 18); Färg [2] = slumpmässig (3, 18); c = remsa. Färg (Färg [1], Färg [0], Färg [2]); värde = poäng / 10; värde = värde * 4; y = 0; för (tal = värde; tal <värde+4; tal ++) {för (osignerad char vertical = 0; vertikal <8; vertikal ++) {displayscore [y] [vertikal] = tecken [nummer] [vertikal]; } y ++; } värde = poäng % 10; värde = värde * 4; för (tal = värde; tal <värde+4; tal ++) {för (osignerad char vertical = 0; vertikal <8; vertikal ++) {displayscore [y] [vertikal] = tecken [nummer] [vertikal]; } y ++; } för (osignerat tecken horisontellt = 0; horisontellt <8; horisontellt ++) {för (osignerat tecken vertikalt = 0; vertikalt <8; vertikalt ++) {if (displayscore [horisontellt] [vertikalt] == 1) // Bedöm om ljuset är på. {strip.setPixelColor (ljus [horisontell] [vertikal], c); } annars strip.setPixelColor (ljus [horisontell] [vertikal], 0); }} strip.show (); // Skicka datafördröjning (5000); K = 0; // Återställ joystickriktningen sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Återställ ormkoordinatpoäng = 0; // Återställ spelet poäng hastighetS = 400; // Ormens initialhastighet} void setup () {Serial.begin (9600); // Initialize library strip.begin (); // Skicka data. Standardfärgen för varje punkt som 0. Så varje punkt belyses inte i början. strip.show (); K = 0; // Återställ riktningen för joystick sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Återställ ormkoordinatpoäng = 0; // Återställ spelpoäng Färg [0] = slumpmässig (3, 18); // Ställ in färg. Parameter är R G B, intervall 0-255. Färg [1] = slumpmässig (3, 18); Färg [2] = slumpmässig (3, 18); c = remsa. Färg (Färg [1], Färg [0], Färg [2]); // Grön Röd Blå // Ställ in färg för (tal = 0; tal <24; nummer ++) {strip.setPixelColor (gå [nummer], c); } strip.show (); // Skicka datafördröjning (2000); SLUMPMÄSSIG(); // Producera mat} void mobile () {KEY = K; // Varje ormrörelse gör att riktningen ändras för en gångs skull. om (KEY == 8) // Orm uppåtgående rörelse {för (int i = 2 + poäng; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] - 1; if (sy [0] <0) // Gå bortom gränsen och fortsätt på andra sidan sy [0] = 7; } annat om (KEY == 5) // Orm nedåtgående rörelse {för (int i = 2 + poäng; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] + 1; if (sy [0]> 7) // Gå bortom gränsen och fortsätt på andra sidan sy [0] = 0; } annat om (KEY == 4) // Snake vänster rörelse {för (int i = 2 + poäng; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] - 1; if (sx [0] <0) // Gå bortom gränsen och fortsätt på andra sidan sx [0] = 7; } annat om (KEY == 6) // Orm höger rörelse {för (int i = 2 + poäng; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] + 1; if (sx [0]> 7) // Gå bortom gränsen och fortsätt på andra sidan sx [0] = 0; } // Flytta ormkropp med knapp} tomrumsvisning () {för (nummer = 0; nummer <64; nummer ++) // Rensa skärmen {strip.setPixelColor (tal, 0); } strip.show (); Färg [0] = 40; // Ställ in färg. Parameter är R G B, intervall 0-255. Färg [1] = 0; Färg [2] = 0; c = remsa. Färg (Färg [1], Färg [0], Färg [2]); // Grön Röd Blå // Ställ in färg x = ljus [FX] [FY]; // Visa matremsa.setPixelColor (x, c); Färg [0] = slumpmässig (3, 18); // Ställ in färg. Parameter är R G B, intervall 0-255. Färg [1] = slumpmässig (3, 18); Färg [2] = slumpmässig (3, 18); c = remsa. Färg (Färg [1], Färg [0], Färg [2]); // Grön röd blå // Ställ in färg för (int i = 2 + poäng; i> 0; i--) // Visa ormkropp {x = ljus [sx [sy ; strip.setPixelColor (x, c); } Färg [0] = 0; // Ställ in färg. Parameter är R G B, intervall 0-255. Färg [1] = 40; Färg [2] = 0; c = remsa. Färg (Färg [1], Färg [0], Färg [2]); // Grön röd blå // Ställ in färg x = ljus [sx [0] [sy [0]; // Visa ormhuvudremsa.setPixelColor (x, c); strip.show (); // Skicka data} void loop () {mobile (); myDelay (speedS); // Inom () är fördröjningstid. visar (); SX = sx [0]; SY = sy [0]; // Få koordinat för ormhuvud för (int i = 1; i <= 2+poäng; i ++) {if (SX == sx && SY == sy ) gameover (); } // Bedöm om ormhuvudet rörde kroppen. Vid beröring, sedan vidare till GameOver. om (SY == FY && SX == FX) {RANDOM (); poäng ++; Färg [0] = 40; // Ställ in färg. Parameter är R G B, intervall 0-255. Färg [1] = 0; Färg [2] = 0; c = remsa. Färg (Färg [1], Färg [0], Färg [2]); // Grön Röd Blå // Ställ in färg x = ljus [FX] [FY]; // Visa matremsa.setPixelColor (x, c); strip.show (); // Skicka data om (! (poäng % 5)) {// Accelerera ormhastigheten enligt poängen. Var femte mat som äts får du 100 ms. speedS = speedS - 50; if (speedS <150) // Den nedre gränsen är 200 ms. Om hastigheten är lägre än 200 ms förblir hastigheten 200 ms. hastighet S = 150; }} // Bedöm om maten äts. Om ormen åt mat, plus poäng och återskapa mat slumpmässigt. }

Experiment Resultat

Steg 4: Experimentresultat

Relativa avläsningar:

FreaksBot Bluetooth -bil

Tänd den första pärlan på 8*8 NeoPixels Matrix med Arduino

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

Produktprodukt på fredag: LED -musikfrekvensspektrumslödningssats

Använd ElecFreaks Micro: bit Tinker Kit för att skapa ett smart ljus

Rekommenderad: