Inhoudsopgave:
- Stap 1: Onderdelenlijst:
- Stap 2: Hardwareverbinding
- Stap 3: Programmeren
- Stap 4: Experimentresultaat
Video: NeoPixels Matrix (Snake Game: 4 stappen)
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:15
Herinner je je nog het slangenspel dat we in onze kindertijd op onze speeldoos of mobiel speelden? Vandaag gaan we leren hoe we een slangenspel kunnen maken met 8*8 NeoPixels Matrix. We kiezen Arduino uno als controlecentrum en Joystick breakout-module om de slang te besturen.
Stap 1: Onderdelenlijst:
Hardware:
1 X Freaduino UNO Rev2.2 MB_EFUNO
1 X Flexibele 64 RGB LED 8*8 NeoPixels Matrix
1 X Joystick breakout-module BKOUT_MD01
3 X-richtlijn:
Software:
Arduino IDE
Stap 2: Hardwareverbinding
Sluit NeoPixels aan op pin D2.
"X" op Joystick breakout-module sluit pin A0 aan op Arduino UNO-bord, "Y" sluit pin A1 aan, "K" sluit pin A2 aan.
Stap 3: Programmeren
P#include
#define PIN 2 //Output Pin #define MAX_LED 64 //Aantal kraal uint32_t c; int a = 0, getal; niet-ondertekend char huan = 0, ci = 0; niet-ondertekend char u = 40; // De lettergrootte van woordgroep unsigned char x = 0; niet-ondertekende char Kleur [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 unsigned 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 het te verzenden woord in {{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, 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 }, }; unsigned char displayscore [8][8]; int-snelheidS = 400; // Beginsnelheid van snake int-score; // Spelscore int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Coördinaat van voedsel int SX, SY; // Coördinaat van slangenkop int KEY, K; int Ingeschakeld; // Inschakelen om game char sx [64] opnieuw te starten; //Coördinaat van slangenlichaam char sy [64]; Adafruit_NeoPixel-strip = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM() { A: FX = willekeurig (0, 7); FY = willekeurig (0, 7); for (int i = 0; i < 3 + score; i++) // Voorkom dat voedsel op het lichaam van een slang wordt weergegeven { if (FX == sx && FY == sy) goto A; } } void myDelay (unsigned int Time) { // Tijdens de vertragingsperiode van slangbewegingen moeten we iets doen als voedselglitter en de richting van Joystick lezen voor (int t = 1; t 950 && KEY! = 5) { K = 8; } else if (yWaarde < 50 && KEY != 8) { K = 5; } else if (xWaarde 950 && KEY != 4) { K = 6; } } // Hier kunt u vergelijken of de richting van het toetsenbord tegengesteld is aan de bewegingsrichting van de slang. Als het tegenovergestelde is, geef dan het toetsenbord op. /************************************************** ************************************************** ************************************************** ************************************************** ********/ void gameover() { // Zodra het Gameover-programma is gestopt, drukt u op de centrale knop om het spel opnieuw te starten. niet-ondertekende char-waarde, y; Kleur [0] = willekeurig (3, 18); // Kleur instellen. Parameter is R G B, bereik 0-255. Kleur [1] = willekeurig (3, 18); Kleur [2] = willekeurig (3, 18); c = strip. Kleur(Kleur[1], Kleur[0], Kleur[2]); waarde = score / 10; waarde = waarde * 4; y = 0; for (getal = waarde; getal < waarde + 4; getal++) { for (unsigned char verticaal = 0; verticaal < 8; verticaal++) { displayscore[y][verticaal] = karakter[getal][verticaal]; } y++; } waarde = score % 10; waarde = waarde * 4; for (getal = waarde; getal < waarde + 4; getal++) { for (unsigned char verticaal = 0; verticaal < 8; verticaal++) { displayscore[y][verticaal] = karakter[getal][verticaal]; } y++; } for (unsigned char horizontal = 0; horizontal < 8; horizontal++) { for (unsigned char vertical = 0; vertical < 8; vertical++) { if (displayscore[horizontal][vertical] == 1) //Beoordeel of het licht staat aan. { strip.setPixelColor (licht [horizontaal] [verticaal], c); } else strip.setPixelColor (licht [horizontaal] [verticaal], 0); } } strip.show();//Stuur data vertraging (5000); K = 0; // Reset joystick richting sx [0] = 2; sx[1] = 1; sx[2] = 0; sy[0] = 1; sy[1] = 1; sy[2] = 1; // Reset slangencoördinaatscore = 0; // Reset spelscore snelheden S = 400; // De beginsnelheid van snake } void setup () { Serial.begin (9600); // Initialiseer bibliotheek strip.begin(); // Verstuur data. Standaard is de kleur van elk punt 0. Dus niet elk punt wordt aan het begin verlicht. strip.show(); K = 0; // Reset de richting van Joystick sx [0] = 2; sx[1] = 1; sx[2] = 0; sy[0] = 1; sy[1] = 1; sy[2] = 1; // Reset slangencoördinaatscore = 0; // Spelscore resetten Kleur [0] = willekeurig (3, 18); // Kleur instellen. Parameter is R G B, bereik 0-255. Kleur [1] = willekeurig (3, 18); Kleur [2] = willekeurig (3, 18); c = strip. Kleur(Kleur[1], Kleur[0], Kleur[2]); // Groen Rood Blauw // Kleur instellen voor (nummer = 0; nummer <24; nummer ++) { strip.setPixelColor (go [nummer], c); } strip.show();// Verzend datavertraging (2000); WILLEKEURIG(); //Voedsel produceren } void mobile () { KEY = K; //Elke beweging van de slang verandert de richting voor één keer. if (KEY == 8) // Snake opwaartse beweging { 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) // Ga over de grens en ga aan de andere kant verder sy[0] = 7; } else if (KEY == 5) // Snake neerwaartse beweging { 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) // Ga voorbij de grens en ga verder aan de andere kant sy[0] = 0; } else if (KEY == 4) // Snake linkerbeweging { 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) // Ga voorbij de grens en ga verder aan de andere kant sx[0] = 7; } else if (KEY == 6) // Snake rechtse beweging { 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) // Ga voorbij de grens en ga verder aan de andere kant sx[0] = 0; } // Verplaats slanglichaam met knop } void displays() { for (number = 0; number <64; number++) // Clear the screen { strip.setPixelColor(number, 0); } strip.show(); Kleur [0] = 40; // Kleur instellen. Parameter is R G B, bereik 0-255. Kleur [1] = 0; Kleur [2] = 0; c = strip. Kleur(Kleur[1], Kleur[0], Kleur[2]); // Groen Rood Blauw // Kleur instellen x = licht [FX][FY]; //Voedselstrip weergeven.setPixelColor (x, c); Kleur [0] = willekeurig (3, 18); // Kleur instellen. Parameter is R G B, bereik 0-255. Kleur [1] = willekeurig (3, 18); Kleur [2] = willekeurig (3, 18); c = strip. Kleur(Kleur[1], Kleur[0], Kleur[2]); // Groen Rood Blauw // Kleur instellen voor (int i = 2 + score; i> 0; i--) //Slanglichaam weergeven {x = light[sx[sy; strip.setPixelColor(x, c); } Kleur[0] = 0; // Kleur instellen. Parameter is R G B, bereik 0-255. Kleur [1] = 40; Kleur [2] = 0; c = strip. Kleur(Kleur[1], Kleur[0], Kleur[2]); // Groen Rood Blauw // Kleur instellen x = licht [sx[0][sy[0]; //Slangenkopstrip weergeven.setPixelColor (x, c); strip.show();//Stuur data} void loop() { mobile(); mijnVertraging(snelheden); // Within() is vertragingstijd. geeft weer(); SX = sx[0]; SY = sy[0]; // Haal de coördinaat van slangenkop op voor (int i = 1; i <= 2 + score; i++) { if (SX == sx && SY == sy) gameover(); } // Beoordeel of de kop van de slang zijn lichaam heeft aangeraakt. Indien aangeraakt, ga dan door naar GameOver. if (SY == FY && SX == FX) { RANDOM(); scoren ++; Kleur [0] = 40; // Kleur instellen. Parameter is R G B, bereik 0-255. Kleur [1] = 0; Kleur [2] = 0; c = strip. Kleur(Kleur[1], Kleur[0], Kleur[2]); // Groen Rood Blauw // Kleur instellen x = licht [FX][FY]; //Voedselstrip weergeven.setPixelColor (x, c); strip.show();//Stuur gegevens als (!(score % 5)) { // Versnel de slangsnelheid volgens de score. Versnel elke 5 voedingsmiddelen die worden gegeten, 100 ms. snelheidS = snelheidS - 50; if (speedS < 150) // De onderste limiet is 200 ms. Als de snelheid lager is dan 200 ms, blijft de snelheid 200 ms. snelheidS = 150; } } // Beoordeel of er gegeten wordt. Als de slang voedsel at, plus scores en willekeurig voedsel regenereren. }
Experimentresultaat
Stap 4: Experimentresultaat
Relatieve metingen:
FreaksBot Bluetooth-auto
Steek de eerste kraal aan op 8*8 NeoPixels Matrix met Arduino
Micro:bit Experiment 05: RGB LED -- Elecfreaks Mirco: bit Starter Kit Cursus
Vrijdag Product Post: LED Music Frequency Spectrum Display Soldeerset
Gebruik ElecFreaks Micro:bit Tinker Kit om een Smart Light te maken
Aanbevolen:
DIY SMART LED MATRIX (ESP8266 + WS2812 / NeoPixels): 7 stappen (met afbeeldingen)
DIY SMART LED MATRIX (ESP8266 + WS2812 / NeoPixels): Hier is mijn inleiding tot een project dat ik u graag wil laten zien. Het gaat om een doe-het-zelf Smart LED Matrix waarmee je gegevens, zoals YouTube-statistieken, je Smart Home-statistieken, zoals temperatuur, vochtigheid, een eenvoudige klok kunt laten zien, of gewoon
8x16 LED Matrix Pong Game (2 peddels per spelerversie): 3 stappen
8x16 LED Matrix Pong-spel (2 paddles per spelerversie): Ik ben geïnspireerd door vele variaties van het klassieke Pong-spel dat op Arduino is geïmplementeerd met behulp van een 8x8 LED-matrix. In deze instructable laat ik je zien hoe je mijn favoriete Pong-versie kunt bouwen met twee peddels - spits en keeper - per speler
Game of Snake in C: 8 stappen
Game of Snake in C: Snake-spel was populair in oude mobiele telefoons die heel gemakkelijk kunnen worden ontwikkeld met behulp van het c-programma. Om dit project te bouwen, hebt u basiskennis van de c-syntaxis nodig. Voorbeeld: voor lus, terwijl lus, enz. Met het bouwen van dit type spelproject worden je prog
MATRIX Voice en MATRIX Creator met Alexa (C++-versie): 7 stappen
MATRIX Voice en MATRIX Creator met Alexa (C++-versie): Vereiste hardware Laten we, voordat we beginnen, bekijken wat je nodig hebt. Raspberry Pi 3 (aanbevolen) of Pi 2 Model B (ondersteund). MATRIX Voice of MATRIX Creator - Raspberry Pi heeft geen ingebouwde microfoon, de MATRIX Voice/Creator wel
Arduino Snake op een VGA-monitor: 5 stappen
Arduino Snake op een VGA-monitor: Nou… ik heb een Arduino gekocht. Aanvankelijk was de investering gemotiveerd met iets waardoor mijn dochter geïnteresseerd zou raken in programmeren. Het bleek echter dat dit ding voor mij leuker was om mee te spelen. Na wat spelen met het maken van LED's