Obsah:
- Zásoby
- Krok 1: Instalace Paint.net
- Krok 2: Nakreslení jednoduché úvodní obrazovky
- Krok 3: Převod bitmapového souboru BMP na C
- Krok 4: Zobrazení LOGA pomocí DrawBitmap
- Krok 5: Přesun bitmapového skřítka
- Krok 6: Vytvoření hry pro řízení
Video: Reckless Racer Arduino OLED Game, AdafruitGFX a Bitmaps Základy: 6 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:19
V tomto tutoriálu se podíváme na to, jak používat bitmapy pomocí knihovny Adafruit_GFX.c jako jakési skřítky ve hře. Nejjednodušší hrou, kterou jsme si mohli představit, je auto s bočním posouváním jízdního pruhu, nakonec se náš beta tester a asistent kodéru rozhodli pro název „Reckless Racer“, protože je docela lehkomyslné jet špatnou cestou po dálnici !!.
Návrh našeho obvodu je na výše uvedených obrázcích a je podrobně popsán v našem posledním projektu/tutoriálu zde Snake Instructables, který popisuje, jak obvod funguje.
budeme požadovat
Adafruit_GFX
Paint.net
Arduino IDE windowslinux
a prosím, podívejte se na výukový program Snake pro ostatní vybavení.
Zásoby
Hadová hra
Krok 1: Instalace Paint.net
Používáme paint.net, protože software je zdarma, takže zcela zdarma k použití si můžete stáhnout Paint. Net zde.
Chcete -li nainstalovat paint.net, dvakrát klikněte na stažený program a odpovězte kladně, například ano, ok, souhlasím a obrázky nahoře vám poskytnou pokyny.
Krok 2: Nakreslení jednoduché úvodní obrazovky
Když jste v paint.net, vytvořte nový obrázek kliknutím na Soubor a poté na nový, nastavte velikost obrázku na 1260x620 (viz první obrázek) klikněte na ok, když máte novou stránku, nakreslete úvodní obrazovku pouze pomocí 2 barev černé a bílé pomocí tužky nástroj (obr.2), když nakreslíte (nebo vložíte) obrázek úvodní obrazovky, klikněte na obrázek a poté změňte velikost (obrázek 4), ve vyskakovacím okně změňte velikost z 1260x620 na 126x62 (o 2 pixely menší než váš displej) (obrázek5) Klikněte na OK.
dále klikněte na nabídku Soubor a poté uložte jako (obr. 6).
když se v rozevírací nabídce typu souboru objeví vyskakovací okno, vyberte BMP (bitmapa). (obr.).
Krok 3: Převod bitmapového souboru BMP na C
Nyní musíme převést náš obrázek do formátu, kterému arduino rozumí, že k tomu je k dispozici spousta nástrojů, ale moje místo „přejít“je nástroj pro převádění bitmap na webových stránkách is marlin…
marlinfw.org/tools/u8glib/converter.html
Tuto sekci tedy spustíme pomocí výše uvedeného odkazu k otevření webové stránky, která je zobrazena na obrázku 1
klikněte na vybrat soubor a vyberte bitmapu, kterou jste vytvořili dříve (obr.2)
marlin bitmapový konvertor automaticky převede váš obrázek na kód c levým dvojitým kliknutím na kód, který by měl kód zvýraznit, poté pravým kliknutím a kliknutím na kopírovat (obr. 3)
další Vytvoříme pravé tlačítko a vytvoříme nový textový dokument (obr.
poklepejte na nový dokument, po otevření klikněte pravým tlačítkem a vložte kód (obr. 5)
dále musíme přidat řádek v horní části kódu #zahrnout toto nám umožňuje uložit bitmapová data do flash paměti na arduino, poté přejmenujeme #define width, height and name na něco jednoduššího použití tyto jsou zvýrazněny na obrázku 6, přejmenujeme je z náhodně generovaných znaků přejmenujeme je na podtržený příklad níže
#define LOGOWIDTH
#definovat LOGOHEIGHT
konst. nepodepsaný znak LOGOPICKÝ PROGMEM
dále klikněte na soubor, poté uložte jako, uložte soubor jako logo.c zavřete poznámkový blok, klikněte pravým tlačítkem na logo.c a klikněte na kopírovat.
Krok 4: Zobrazení LOGA pomocí DrawBitmap
Nyní načteme arduino IDE a vytvoříme nový náčrt a uložíme jej pojmenovaný jako logoexample.ino, dále jako cheat v arduino ide klikněte na nabídku souboru, poté uložte jako, vraťte se zpět do složky projektu klikněte pravým tlačítkem a vložte do souboru.c (obr.
zadejte následující kód do arduino IDE nebo si stáhněte ino.
(doporučujeme psát, ne kopírovat a vkládat nebo používat níže uvedené soubory, což je nejlepší způsob, jak se to naučit)
#include /* toto se bude lišit v závislosti na tom, kde skladujete
ino obvykle ve složce C: / Users / ~ uživatelské jméno / Documents / Arduino / project ~ name
a takto odkazujeme na naši bitmapu */
#zahrnout
#zahrnout
uint8_t bmpX, bmpY = 0; /* rezervujte paměť pro 2 x 8bitová celá čísla, potřebujeme pouze 8bitové inty
protože hodnota nikdy není vyšší než 128 (pixelů), takže můžeme ušetřit místo pomocí 8 bitů ints (což má maximální hodnotu 255) */
neplatné nastavení ()
{zpoždění (100); // dát zobrazení atd. čas na zapnutí displeje.begin (SSD1306_SWITCHCAPVCC, 0x3C); // toto má inicializovat displej display.clearDisplay (); // začněte s prázdnou obrazovkou}
/* upozorňujeme, že tyto komentáře nemusíte psát, jsou pouze referenční …………..
příkaz, na který se zaměříme, je display.drawBitmap, to je to, co kreslí naši úvodní obrazovku. (bmpX, je hodnota osy X na obrazovce, kde bude kotevní bod X bitmapy a bmpX a bmpY jsou hodnoty, které nás zajímají k vytvoření pohybu (bmpY, je hodnota osy Y na obrazovce, kde je kotva Y bodem bitmapy bude, že získáme referenční názvy, jak jsme je definovali v logu. c (LOGOPIC, je název bitmapy v #zahrnutém logu souboru. c (LOGOWIDTH, je počet pixelů napříč (X) k vykreslení bitmapa z kotevního bodu (LOGOHEIGHT, je počet pixelů dolů (Y) k vykreslení bitmapy z kotevního bodu, pixely X a Y napříč lze zadat ručně, ale je jednodušší použít ty předdefinované, než si je všechny pamatovat (1, poslední hodnota je barva, protože obrazovka je mono 0 černá 1 bílá. dobře začněte psát z dalšího řádku: ¬D lol*/ void loop () {display.clearDisplay (); // vyprázdnění obrazovky // bitmapa nakreslená z vlevo nahoře, x, y, název bitmapy, šířka X, výška Y, barevný displej.drawBitmap (bmpX, bmpY, LOGOPIC, LOGOWIDTH, LOGOHEIGHT, 1); display.display (); // toto ve skutečnosti vykreslí vyrovnávací paměť na displej}
nahrajte kód arduino a potvrďte, že funguje (obr. 3).
Krok 5: Přesun bitmapového skřítka
podle dřívějších instrukcí použijte paint.net a vytvořte nový soubor o rozměrech 30 x 15 pixelů (obr. 1) a nakreslete drsné auto, které náš mladý designér začíná nejprve na čelním skle (obrázky 2 a 3).
opět uložte jako soubor bmp systému Windows (jako v kroku 2), převeďte na bitmapu C (krok 3) a umístěte soubor car.c (nebo cokoli, pro co se rozhodnete) do stejné složky jako nově vytvořený arduino ino (skica) soubor.
(P.s. nezapomeňte přidat řádek #include do auta. c to nás často chytilo)
Nejprve propojte svůj ekvivalent s autem. C
#zahrnout
#include #include Adafruit_GFX.h> // https://github.com/adafruit/Adafruit-GFX-Library #include Adafruit_SSD1306 //
Displej Adafruit_SSD1306 (128, 64); // nastavení rozlišení displeje
/* bmpX/bmpY potřebujeme, aby to byly proměnné při změně těchto hodnot a překreslení
na obrazovce vytváříme efekt pohybové animace. hitSide a hitTop je způsob, jakým udržujeme sprite na obrazovce */ uint8_t bmpX, bmpY = 0; // rezerva paměti na 2 8 bitů ints (0-255) nepotřebujeme větší 128 bude největší počet použitých bool hitSide = 0; bool hitTop = 0;
neplatné nastavení ()
{zpoždění (100); // dát zobrazení atd. čas na zapnutí display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // toto má inicializovat displej display.clearDisplay (); // začněte prázdnou obrazovkou
}
prázdná smyčka ()
{display.clearDisplay (); // vyprázdnění obrazovky // bitmapa nakreslená zleva nahoře, x, y, název bitmapy, šířka X, výška Y, barevný displej.drawBitmap (bmpX, bmpY, CARSPRITE, CARWIDTH, CARHEIGHT, 1); // display.display (); // toto vlastně vykreslí vyrovnávací paměť na displej vůbec/ * takto sledujeme okraj obrazovky a rozhodujeme, zda přidat pixel posunutí shora dolů) nebo odebrání pixelu (pohyb zdola nahoru) */ přepínač (hitSide) // toto zvolí směr auta na základě boole {případ 0: bmpX ++; přestávka;
případ 1:
bmpX--; přestávka; } // tyto 2 if příkazy nastaví bool na true nebo false if (bmpX == 0) {hitSide = 0; } if (bmpX == 96) // šířka obrazovky minus auto {hitSide = 1; } // stejné jako výše pro osu Y if (bmpY == 0) {hitTop = 0; } if (bmpY == 49) // výška obrazovky minus výška auta {hitTop = 1; } switch (hitTop) {case 0: bmpY ++; přestávka; případ 1: bmpY--; přestávka; }
}
program můžete vidět v přiloženém videu
Krok 6: Vytvoření hry pro řízení
Nejprve začneme tím, že nakreslíme několik různých aut nebo překážek, jako v předchozích fázích tutoriálu, a vytvoříme z nich 30x15 pixelů. Poté je převedeme na c bitmapy a propojíme v kódu.
#include // tyto cesty se budou muset změnit v závislosti
// kam ukládáte soubory // edit: právě jsem zjistil, jestli nahradíte // za "" nevyžadujete úplnou cestu // s vlastními knihovnami #include
#zahrnout
#include #include
#zahrnout
#include // https://github.com/adafruit/Adafruit-GFX-Library #include <Adafruit_SSD1306 //
Displej Adafruit_SSD1306 (128, 64); // definujte parametry zobrazení
definujte proměnné a pevné hodnoty
// definujte vstupní piny to jsou piny na Arduinu, které se nikdy nezmění, takže #definujte #definujte INTPIN 3 // pouze piny 2 a 3 mohou být přerušovací piny na UNO #definovat UPPIN 4 // to jsou piny připojené tp relevantní přepínač #definovat DWNPIN 5 #define LFTPIN 6 #define RHTPIN 7 #define SND 9 // definovat směry
#define DIRUP 1 // podle těchto hodnot se „had“dívá, aby se rozhodl-
#definovat DIRDOWN 2 // směr, kterým se had bude pohybovat #definovat DIRLEFT 3 #define DIRRIGHT 4
uint8_t dirPressed = 0; // hodnota pro registraci směru k pohybu, na kterém kolíku šel vysoko
// booleovský obchod, jehož pin se zvýšil
bool BUTUP = 0; bool BUTDWN = 0; bool BUTLFT = 0; bool BUTRHT = 0; // vars pro polohu auta uint8_t carPosX = 1; uint8_t carPosY = {0, 16, 32, 48}; // potřebuje hodnotu cahnging pole
uint8_t lanePosArr = {0, 16, 32, 48}; // pole k uložení, kde je každý pruh
uint8_t carPosYCnt = 0; uint8_t carYTmp = 0; // proměnné pro čáry na silnici uint8_t roadLineX1 = 51; // tyto jsou předdefinovány na začátku, pak se čáry jeví jako bezproblémové uint8_t roadLineX2 = 102; uint8_t roadLineX3 = 153; uint8_t roadLineX4 = 254; uint8_t roadLineX5 = 200;
// to je počet pixelů, ve kterých se hrací plocha pohybuje současně
uint8_t drawSpeed = 4;
// vars pro nepřítele0
uint8_t nepřátel0PosX = 255; uint8_t nepřátel0PosY = 0; uint8_t nepřátel1PosX = 255; uint8_t nepřátelský1PosY = 0; uint8_t nepřátel2PosX = 255; uint8_t nepřátel2PosY = 0;
// proměnná k náhodnému přiřazení čísla pruhu překážkám
uint8_t laneGen = 0;
uint8_t laneGen0 = 0; uint8_t laneGen1 = 0; uint8_t laneGen2 = 0;
// počítadlo skóre
dlouhé skóre = 0; // toto je skóre:/ lol dlouhé porovnání = 0; // toto uloží skóre na poslední úrovni nahoru pro porovnání zpět k dlouhému highScore = 25; uint8_t metreCnt = 0;
zde začínáme funkce
// toto je sada příkazů, pokud je aktivováno přerušení void interruptressed () {delay (150); updateDirection (); } // aktualizujte, která hodnota je ve směru var, kontrolou boolů DIR // -------------------------- UPDATE DIRECTION (player)- ------------------------- neplatná aktualizaceDirection () {//Serial.println("updateDirection Called "); BUTUP = digitalRead (UPPIN); BUTDWN = digitalRead (DWNPIN); BUTLFT = digitalRead (LFTPIN); BUTRHT = digitalRead (RHTPIN); if (BUTUP == true) {dirPressed = DIRUP; } if (BUTDWN == true) {dirPressed = DIRDOWN; } if (BUTLFT == true) {dirPressed = DIRLEFT; } if (BUTRHT == true) {dirPressed = DIRRIGHT; }
}
// ------------------------------- MOVE CAR --------------- -------------------------
// tím se aktualizuje obrazovka pohyblivého vozu
void moveCar ()
{switch (dirPressed) {case DIRUP: carPosYCnt--; carPosY [carPosYCnt]; tón (SND, 100, 100); if (carPosYCnt == 255) {carPosYCnt = 0; } carYTmp = carPosY [carPosYCnt]; dirPressed = 0; // Serial.println ("carPosY up"); // Serial.println (carPosYCnt); přestávka; případ DIRDOWN: carPosYCnt ++; tón (SND, 100, 100); if (carPosYCnt == 4) {carPosYCnt = 3; } // Serial.println ("carPosY"); // Serial.println (carPosYCnt); carYTmp = carPosY [carPosYCnt]; dirPressed = 0; přestávka; // komentované auto schopné pohybu vlevo a vpravo detekce kolize zatím není tak dobrá /* případ DIRLEFT: carPosX--; if (carPosX == 0) {carPosX = 1; } // Serial.println ("carPosX"); // Serial.println (carPosX); dirPressed = 0; přestávka; */ case DIRRIGHT: // jen pro zábavu, pokud stisknete správně, hra vydá hluk (SND, 100, 50); // carPosX ++; // if (carPosX == 128) // {// carPosX = 127; //} // Serial.println ("carPosX"); // Serial.println (carPosX); // dirPressed = 0; přestávka; } updateDisplay (); }
// -------------------------- NÁHODNÝ POS X ------------------- -----------
uint8_t randomPosX () // tyto 2 rutiny pouze generují náhodnou polohu překážek
{uint8_t posValTmp = 0; posValTmp = náhodný (129, 230); //Serial.println("raddom x "); //Serial.println(posValTmp); return (posValTmp); }
// --------------------------- NÁHODNÝ POS Y ------------------ ------------------
uint8_t randomPosY ()
{uint8_t laneVal = 0; laneVal = náhodný (0, 4); // přidejte další pruh pro náhodnost, tj. žádný objekt na obrazovce, když jste v tomto pruhu //Serial.println("RandomY "); //Serial.println(lanePosArr[laneVal]); return (lanePosArr [laneVal]); }// ------------------------------- NASTAVIT RYCHLOST HRY -------------- -------------- void setGameSpeed () // tím se zastaví úroveň vyšší než 20, takže hra nebude hratelná {if (drawSpeed <21) {drawSpeed = drawSpeed+2; }}// ------------------------------------ DETEKCE ZRUŠENÍ ---------- ----------------------- neplatné detectCrash () {
if (nepřátel0PosX = 0 && nepřátel0PosY == carYTmp)
{// Serial.println ("Hra přes CRAASSSSHHHHHHEEEEEDDD do provozu 0"); konec hry(); } if (nepřátelský1PosX = 0 && konec hry(); } if (nepřátel2PosX = 0 && nepřátel2PosY == carYTmp) {//Serial.println("Game Over CRAASSSSHHHHHHHEEEEEDDD do provozu 2 "); konec hry(); }}
to jsou rutiny, které kreslí displej.
// ------------------------------- NAKRESLTE CESTU --------------- --------------------- neplatné drawRoad () // X, Y, délka, šířka {display.fillRect (roadLineX1, 15, 30, 4, WHITE); display.fillRect (roadLineX1, 30, 30, 4, WHITE); display.fillRect (roadLineX1, 45, 30, 4, WHITE); display.fillRect (roadLineX2, 15, 30, 4, WHITE); display.fillRect (roadLineX2, 30, 30, 4, WHITE); display.fillRect (roadLineX2, 45, 30, 4, WHITE); display.fillRect (roadLineX3, 15, 30, 4, WHITE); display.fillRect (roadLineX3, 30, 30, 4, WHITE); display.fillRect (roadLineX3, 45, 30, 4, WHITE); display.fillRect (roadLineX4, 15, 30, 4, WHITE); display.fillRect (roadLineX4, 30, 30, 4, WHITE); display.fillRect (roadLineX4, 45, 30, 4, WHITE); display.fillRect (roadLineX5, 15, 30, 4, WHITE); display.fillRect (roadLineX5, 30, 30, 4, WHITE); display.fillRect (roadLineX5, 45, 30, 4, WHITE);
roadLineX1 = roadLineX1-drawSpeed;
roadLineX2 = roadLineX2-drawSpeed; roadLineX3 = roadLineX3-drawSpeed; roadLineX4 = roadLineX4-drawSpeed; roadLineX5 = roadLineX5-drawSpeed; display.display (); } // ----------------------------------------- DRAW enemys ---- --------------------------------------- neplatné enemysDraw () {// X, Y, název bmp, šířka, výška, barevný displej.drawBitmap (nepřátelský0PosX, nepřátelský0PosY, ENEMY0, ENEMY0_WIDTH, ENEMY0_HEIGHT, 1); nepřítel0PosX = nepřátel0PosX-drawSpeed; display.drawBitmap (nepřítel1PosX, nepřítel1PosY, ENEMY1, ENEMY1_WIDTH, ENEMY1_HEIGHT, 1); nepřátelské1PosX = nepřátelské1PosX-drawSpeed; display.drawBitmap (nepřátelské2PosX, nepřátelské2PosY, ENEMY2, ENEMY2_WIDTH, ENEMY2_HEIGHT, 1); nepřátelské2PosX = nepřátelské2PosX-drawSpeed; display.display (); if (nepřátelský0PosX> 231 && nepřátelský0PosX231 && nepřátelský1PosX <255) {nepřátel1PosX = randomPosX (); nepřítel1PosY = randomPosY (); checkDuplicate (); }
if (nepřátelský2PosX> 231 && nepřátelský2PosX <255) {nepřátel2PosX = randomPosX (); nepřítel2PosY = randomPosY (); }} // ------------------------------------ UPDATE DISPLAY -------- ---------------------------------------- neplatná aktualizaceDisplay () {display.clearDisplay (); display.drawBitmap (carPosX, carPosY [carPosYCnt], CARSPRITE, 30, 15, 1); display.fillRect (100, 0, 28, 10, ČERNÝ); display.setCursor (100, 0); display.setTextColor (BÍLÁ, ČERNÁ); display.println (skóre); display.display ();
}
// ------------------------- počkejte na smyčku lisů ------------------- ------
// toto je kód domovské obrazovky neplatný waitForPress () {splashScreen (); bool čekání = 0; // smyčka končí, když je to pravda display.clearDisplay (); zatímco (čeká == 0) {
display.fillRect (19, 20, 90, 32, ČERNÝ); // prázdné pozadí pro text
display.setTextColor (BÍLÁ); display.setCursor (23, 24); display.setTextSize (0); display.println („Bezohledný“); display.setCursor (36, 34); display.println („závodník“); display.drawBitmap (74, 24, CARSPRITE, CARWIDTH, CARHEIGHT, 1); // x y w h r col display.drawRoundRect (21, 21, 86, 23, 4, WHITE); // ohraničení Snake display.drawRect (19, 20, 90, 33, WHITE); // rámeček ohraničení - 3 display.setCursor (25, 43); display.setTextSize (0); // písmo zpět na normální zobrazení.println ("stiskněte libovolnou klávesu"); display.fillRect (0, 0, 127, 8, ČERNÝ); display.setCursor (10, 0); display.print ("High Score:"); // zobrazení nejvyššího skóre display.print (highScore); display.display (); čekání = digitalRead (INTPIN); // zkontrolujte, zda se čekání při stisknutí klávesy změní na 1 končící při dirPressed = 0; // tlačítko reset stiskněte bez směru}} // -------------------------------------- ----- UPDATE GAME ----------------------------------------- neplatná aktualizační hra () {moveCar (); drawRoad (); enemysDraw (); // nepřátelský1Draw (); // nepřátelský2Draw (); metreCnt ++; detectCrash (); if (metreCnt == 5) // přidává bod za každých 10 cyklů za účelem navýšení skóre {metreCnt = 0; skóre ++; } if (skóre == porovnat+5) // zrychlí hru každých 5 bodů na maximálně 20 rychlostí {porovnání = skóre; setGameSpeed (); } noTone (SND); updateDisplay ();
}
// ------------------------------ KONEC HRY---------------- ------------------------------
// tato rutina nakreslí čáry kolem auta mrtvého hrdiny a poté zobrazí hru přes obrazovku
neplatná hraOver ()
{tón (SND, 200, 200); // přehrávání zvuku uint8_t linePosX, linePosY, pixwidth, pixheight = 0; // set vars to draw boxes around car linePosX = carPosY; linePosY = carYTmp; šířka pixelu = 30; pixheight = 15; display.drawRect (linePosX, linePosY, pixwidth, pixheight, WHITE); display.display (); for (int i = 0; i <= 26; i ++) // toto obklopuje auto v obdélnících simulujících výbuch {linePosX = linePosX-2; linePosY = linePosY-2; pixwidth = šířka pixelu+4; pixheight = pixheight+4; display.drawRect (linePosX, linePosY, pixwidth, pixheight, BLACK); display.drawRect (linePosX, linePosY, pixwidth, pixheight, WHITE); display.display (); tón (SND, i*20, 50); zpoždění (10); } display.setTextSize (2); display.setTextColor (BÍLÁ, ČERNÁ); display.setCursor (10, 23); tón (SND, 50, 500); display.print („HRA“); display.display (); zpoždění (500); tón (SND, 40, 500); display.print („NAD“); display.setTextSize (0); display.display (); zpoždění (3000); restartGame (); waitForPress (); }
// ----------------------------------------- RESTARTOVÁ HRA ----- ---------------------------------------------------------- -----
void restartGame () // toto zkopíruje vysoké skóre a vynuluje všechny statistiky a vygeneruje náhodné pozice
{if (score> = highScore) // check to see if score higher than high score {highScore = score; // single if statment pro aktualizaci vysokého skóre}
skóre = 0;
drawSpeed = 4; metreCnt = 0; carPosYCnt = 0; nepřítel0PosX = randomPosX (); nepřítel0PosY = randomPosY (); nepřátelský1PosX = randomPosX (); nepřítel1PosY = randomPosY (); nepřítel2PosX = randomPosX (); nepřítel2PosY = randomPosY (); noTone (SND);
checkDuplicate ();
}
// ------------------------------------------------ -ZKONTROLUJTE DUPLIKÁT ----------------------------------------------- ------ void checkDuplicate () // zkontrolují, zda překážky nezabírají stejný herní prostor {// Serial.println ("duplikát zkontrolován"); if (nepřátelský2PosX> 230 && nepřátelský2PosX <255) {while (nepřátelský2PosY == nepřátelský1PosY || nepřátelský2PosY == nepřátel0PosY) {nepřátel2PosY = náhodnýPosY (); }}
if (nepřátelský0PosX> 230 &&
//------------------------------------------- ÚVODNÍ OBRAZOVKA --- --------------------------------
void splashScreen ()
{display.clearDisplay (); display.drawBitmap (0, 0, CRASH, CRASHWIDTH, CRASHHEIGHT, 1); display.display (); zpoždění (2000); } // ----------------------------------------------- ZALOŽIT ------------------------------------------------- ----------- neplatné nastavení () {zpoždění (100); // ať se věci spustí // Serial.begin (9600); // odkomentujte toto a všechny Serial. příkazy pro zobrazení diagnostiky poruch.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay (); display.setTextColor (BÍLÁ, ČERNÁ); display.setTextWrap (false); display.dim (0); pinMode (INTPIN, INPUT); pinMode (UPPIN, INPUT); pinMode (DWNPIN, INPUT); pinMode (LFTPIN, INPUT); pinMode (RHTPIN, INPUT);
attachInterrupt (digitalPinToInterrupt (INTPIN), přerušované, RISING);
// náhodné umístění překážek nepřátel0PosX = randomPosX (); nepřítel0PosY = randomPosY (); nepřátelský1PosX = randomPosX (); nepřítel1PosY = randomPosY (); nepřítel2PosX = randomPosX (); nepřítel2PosY = randomPosY (); checkDuplicate (); // vyhledejte duplicitní umístění // Serial.println ("nastavení dokončeno"); úvodní obrazovka(); waitForPress (); } // ----------------------------------------------- ----- Smyčka -------------------------------------------- ----------
prázdná smyčka ()
{updateGame (); }
a to je skoro vše, jakékoli úpravy a zpětná vazba budou vítány. Problémy, které musíme řešit při blikání obrazovky, musíme prozkoumat, jak jej zmenšit a nepřátelská auta jsou stále schopna zabírat stejný prostor.
Doporučuje:
Pájecí součásti pro povrchovou montáž - Základy pájení: 9 kroků (s obrázky)
Pájecí součásti pro povrchovou montáž | Základy pájení: Dosud jsem v mé sérii Pájecí základy probral dost základů o pájení, abyste mohli začít cvičit. V tomto Instructable bude to, o čem budu diskutovat, trochu pokročilejší, ale je to jeden ze základů pájení Surface Mount Compo
Pájení součástkami díry - Základy pájení: 8 kroků (s obrázky)
Pájení součástkami díry | Základy pájení: V tomto Instructable budu diskutovat o některých základech o pájení součástek s průchozími otvory na deskách plošných spojů. Budu předpokládat, že jste si již vyzkoušeli první 2 instruktážní materiály pro mou sérii základů pájení. Pokud jste se nepodívali na můj In
Pájecí dráty na dráty - Základy pájení: 11 kroků
Pájecí dráty na dráty | Základy pájení: Pro tento Instructable budu diskutovat o běžných způsobech pájení vodičů k jiným vodičům. Budu předpokládat, že jste si již vyzkoušeli první 2 instruktážní materiály pro mou sérii základů pájení. Pokud jste se nepodívali na mé pokyny k používání
Drobné ovladače H-Bridge - Základy: 6 kroků (s obrázky)
Drobné ovladače H-Bridge | Základy: Dobrý den a vítejte zpět u dalšího Instructable! V předchozím jsem vám ukázal, jak jsem vytvořil cívky v KiCadu pomocí pythonového skriptu. Poté jsem vytvořil a otestoval několik variací cívek, abych zjistil, která z nich funguje nejlépe. Mým cílem je nahradit obrovský
Základy rozhraní Arduino TFT: 10 kroků (s obrázky)
Základy rozhraní Arduino TFT: TFT dotykové obrazovky jsou úžasné grafické rozhraní, které lze použít s mikrokontroléry, jako jsou Atmel, PIC, STM, protože má široký barevný rozsah a dobrou grafickou schopnost a dobré mapování pixelů. Dnes se chystáme k rozhraní 2,4 palce TFT