Obsah:
- Krok 1: Zapojenie
- Krok 2: Vyhlásenia
- Krok 3: Funkcia nastavenia
- Krok 4: Funkcia slučky
- Krok 5: Funkcia ClearLCD
- Krok 6: Funkcia DrawBoard
- Krok 7: Funkcia PlayBoard
- Krok 8: Funkcia ClearBoard
- Krok 9: Funkcia názvu
- Krok 10: Funkcia ponuky Buttons
- Krok 11: Funkcia ButtonsGame
- Krok 12: Funkcia GameOver
- Krok 13: Vstupná funkcia
- Krok 14: Funkcia BottomCheck
- Krok 15: Funkcia WriteSerial
- Krok 16: Dokončenie
Video: Arduino - klavírne dlaždice: 16 krokov (s obrázkami)
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:59
Ahojte internetoví ľudia, toto bude o tom, ako DEFINITÍVNE vytvoriť rip z mobilnej hry na arduino uno r3.
takže na začiatok budete potrebovať všetky diely, ktoré sú nasledujúce! 1x Arduino Uno r3 (42 dolárov)
2x štít LCD klávesnice (19 dolárov za kus)
5x tlačidlá
Rezistory 5x 220Ω
28x drôty
Dobre, akonáhle máte všetky diely, je čas začať!
Krok 1: Zapojenie
Začnite zapojením arduina a priateľov podľa schémy, Uistite sa, že sú tlačidlá prepojené správnym smerom, so štrbinami A0-4 na spodnej strane koľajničiek na tlačidlá, alebo si arduino bude namiesto toho myslieť, že tlačidlá sú stále držané, a nie iba stlačením.
Krok 2: Vyhlásenia
Celý kód by tu mal byť pred nastavením prázdnoty a prázdnou slučkou, pretože všetky tieto premenné a objekty sa používajú v niekoľkých funkciách, ktoré nastavíme.
Začnite zadaním:
#zahrnúť
v hornej časti kódu to znamená, že arduino má používať knižnicu „LiquidCrystal.h“a funkcie, ktoré sú jej súčasťou.
Ďalším krokom je definovanie pinov, ktoré používame pre naše tlačidlá, vložením tohto kódu pod naše #include:
#define btnZadajte A0 #definujte btn1 15 #define btn2 16 #define btn3 17 #define btn4 18
Pojmy btnEnter a btn1 až btn 4 definujeme, aby sa nám kód ľahšie čítal, alebo v prípade potreby zmeníme. Znamená to, že keď napíšeme btn1, arduino bude vedieť, že v skutočnosti máme na mysli tlačidlo 15. Napriek tomu, že porty voláme porty 15, 16, 17 a 18, na arduine sú označené ako A1 A2 A3 a A4, je to preto, že sú to porty používané špeciálne pre analógové vstupy, aj keď ich používame iba pre digitálne vstupy.
Ďalej vytvoríme objekty, ktoré budú ovládať displeje z tekutých kryštálov. Za týmto účelom vložte tento kód pod naše definície
LiquidCrystal lcdLeft (8, 9, 12, 10, 11, 13); LiquidCrystal lcdRight (2, 3, 4, 5, 6, 7);
Čo to robí, je arduino, že keď voláme lcdLeft alebo lcdRight, máme na mysli objekt LiquidCrystal. Čísla v priložených zátvorkách informujú arduino, ktoré porty by mal objekt používať na odosielanie správ na LCD displej, keď používame ich funkcie.
Teraz musíme deklarovať premenné vložením nasledujúceho kódu pod deklarácie objektov:
// tieto premenné sú možnosti, ktoré môžete zmeniť - vyššie čísla = rýchlejšie zrýchlenie hry intGameSpeedEasy = 10; int intGameSpeedMedium = 25; int intGameSpeedHard = 80;
// nastavenie premenných pre gameboolean bolPlay; // sleduje, ak prehrávač int intScore; // sleduje skóre hráča int intDiff; // len estetická vec, ktorá hovorí, na akej obtiažnosti je hra // nastavenie premenných pre vstup int intEnter; // sleduje, ak užívateľ stlačí tlačidlo enter int intInput; // sleduje, ktoré tlačidlá používateľ stlačí boolean bolTilePressed; // zaistite, aby hráč omylom nestlačil tlačidlo 5x a prehral // nastavenie premenných pre turn int intTick; // počíta počítadlá (na slučku) do intDelay int intDelay; // čas, ktorý program čaká na ďalšie otočenie v milis int intGameSpeed; // zrušenie možností ladenia boolean bolSerialBoard; // keď true, doska sa vytlačí v sériovom monitore
Proměnnú deklarujeme uvedením dátového typu a potom názvu premennej, napr. int thisIsAnInteger
Booleovské premenné, ako napríklad bolSerialBoard a bolPlay, môžu mať iba jednu z dvoch hodnôt, true alebo false.
Celočíselná premenná (int), ako napríklad intScore a intInput, môže mať hodnotu ako celé číslo, napríklad 1, 5 alebo 100.
Niektoré ďalšie pozoruhodné typy údajov, ktoré tu nepoužívame, sú reťazec, ktorý je kusom textu, a float, čo je desatinné číslo.
Každá z premenných tu program používa na niekoľkých rôznych miestach. Tu je prehľad toho, čo každá z nich robí
bolPlay informuje program, či sa má zobraziť ponuka alebo či má byť spustená skutočná hra.
intScore sleduje skóre hráča po dopade na dlaždice, intDiff sa používa v hlavnej ponuke na informovanie programu, aký kúsok textu má vytlačiť na LCD, intEnter slúži na informovanie programu, či je stlačené tlačidlo Enter (úplne vľavo), intInput slúži na informovanie programu, ktoré z ďalších 4 tlačidiel je stlačené.
bolTilePressed sa používa na zaistenie toho, aby sa program čítal iba pri stlačení tlačidla, a nie pri jeho podržaní.
intGameSpeed, intGameSpeedEasy, intGameSpeedMedium a intGameSpeedHard slúžia na ovládanie toho, ako rýchlo sa má hra zrýchliť podľa toho, aká obtiažnosť je zvolená.
intTick a intDelay sa používajú na zastavenie programu v pohybe po doske vždy, keď sa zacyklí.
BolSerialBoard sa používa na to, aby vám umožnil program odoslať dosku na sériový monitor arduina ako sériu čísel na testovacie účely.
Nakoniec je načase deklarovať našu dosku ako pole pomocou tohto kódu:
// nastavenie poľa hry arrGame [16] [4] = {{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, 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}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}};
Pole je matica, v ktorej je možné pre matematiku vyvolať alebo zmeniť ľubovoľný bod.
Váš kód by teraz mal vyzerať asi takto;
// zahrnutie knižníc#zahrnúť
// tieto premenné sú možnosti, ktoré môžete zmeniť - vyššie čísla = rýchlejšie zrýchlenie hry
int intGameSpeedEasy = 10; int intGameSpeedMedium = 25; int intGameSpeedHard = 80;
// Definujte piny
#define btnZadajte A0 #define btn1 15 #define btn2 16 #define btn3 17 #define btn4 18
// vytváranie objektov LCD (n, ~, n, ~, ~, n)
LiquidCrystal lcdLeft (8, 9, 12, 10, 11, 13); LiquidCrystal lcdRight (2, 3, 4, 5, 6, 7);
// nastavenie herného poľa
int arrGame [16] [4] = {{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, 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}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}};
// nastavenie premenných pre hru
booleovský bolPlay; // sleduje, ak prehrávač int intScore; // sleduje skóre hráča int intDiff; // len estetická vec, ktorá hovorí, na akej obtiažnosti je hra
// nastavenie premenných pre vstup
int intEnter; // sleduje, ak užívateľ stlačí tlačidlo enter int intInput; // sleduje, ktoré tlačidlá používateľ stlačí boolean bolTilePressed; // zaistite, aby hráč omylom nestlačil tlačidlo 5x a prehral
// nastavenie premenných pre turn
int intTick; // počíta počítadlá (na slučku) do intDelay int intDelay; // čas, ktorý program čaká na ďalšie otočenie v milis int intGameSpeed;
// ukončenie možností ladenia
booleovský bolSerialBoard; // keď true, doska sa vytlačí v sériovom monitore
Krok 3: Funkcia nastavenia
Nastavovacia slučka je funkcia, ktorú arduino číta iba raz, keď sa pôvodne spustí.
V nastavovacej slučke práve nastavujeme hodnoty niekoľkých našich premenných, pretože namiesto toho, aby sme im pri deklarácii nastavovali hodnotu, robíme to tu.
Začnite vložením tohto kódu do nastavenia prázdnoty.
bolPlay = false; intScore = 0; intTick = 0; intDelay = 1000; intDiff = 1; intGameSpeed = intGameSpeedMedium;
Každý riadok iba nastavuje premennú na hodnotu.
BolPlay je nastavený na hodnotu false, aby sa hra nezačala hrať.
intScore je nastavený na 0, pretože vaše skóre prirodzene začína na 0.
intTick začína na 0, pretože program momentálne nič nepočíta.
intDelay je nastavený na 1000, pretože to je rýchlosť, ktorou dlaždice začínajú.
intDiff je len asketická vec, aby program podľa náročnosti hry vedel, čo napísať.
intGameSpeed je nastavený na čokoľvek, čo je intGameSpeedMedium, čo znamená, že je nastavený na strednú obtiažnosť.
Potom tento kód vložte do nastavenia prázdnoty pod kód, ktorý ste práve vložili.
lcdLeft.begin (16, 2); lcdRight.begin (16, 2);
Serial.begin (9600);
To oznámi Arduinu, aby začalo komunikovať s počítačom prostredníctvom sériového monitora (viditeľné kliknutím na tlačidlo v pravom hornom rohu IDE arduina).
Vaše nastavenie prázdnoty by teraz malo vyzerať asi takto!
void setup () {Serial.begin (9600); // spustenie sériového monitora // nastavenie premenných bolPlay = false; intScore = 0; intTick = 0; intDelay = 1000; intDiff = 1; intGameSpeed = intGameSpeedMedium; // begin lcd's lcdLeft.begin (16, 2); lcdRight.begin (16, 2); }
Krok 4: Funkcia slučky
Funkciu slučky spúšťa arduino pri každej iterácii arduina.
Skopírujte nasledujúci kód do prázdnej slučky.
void loop () {vstup (); // skontrolujte, či sa prehráva vstup, ak (bolPlay == true) {if (intTick> = intDelay) {// skontrolujte, či sa má hra hrať na ťah alebo pokračovať v čakaní Serial.println ("~~~~~~~ ~~ "); // tlač na označenie dosky pohybujúcej sa na // writeSerial (); // ak je možnosť zapnutá, zapíšte dosku do sériových tlačidielGame (); // kontrola vstupov hráča playBoard (); // presuňte dosku a pridajte novú dlaždicu clearLcd (); // vyčistite LCD pred kreslením drawBoard (); // nakreslite dosku na lcd's bottomCheck (); intTick = 0; // reset intTick} else {buttonsGame (); // kontrola vstupov hráča clearLcd (); // vyčistite LCD pred kreslením drawBoard (); // nakreslite dosku na lcd's intTick = intTick + intGameSpeed; // pridať do kliešťa}} else {clearLcd (); // vyčistite LCD pred kreslením title (); // zobrazenie tlačidiel informácií o názve a skóreMenu (); // čítať vstup prehrávača clearBoard (); // zaistenie celej dosky = 0} zdržanie (10); // oneskorenie arduina o malú chvíľu}
keď sa bolPlay rovná true, znamená to, že sa hra hrá a mal by byť spustený všetok kód, ktorý hra hrá, ale chceme, aby doska pridala novú dlaždicu a posunula sa nadol, keď je hodnota intTick väčšia ako naša hodnota intDelay, v opačnom prípade chceme používateľovi umožniť stlačením tlačidla zasiahnuť dlaždicu a zvýšiť rýchlosť intTick.
Väčšina tohto kódu používa funkcie, ktoré ešte musíme vykonať, a urobíme ich v ďalších krokoch. Účel týchto funkcií je nasledujúci.
Vstup číta, ktoré tlačidlá používateľ stlačil.
buttonsGame ovláda, čo tlačidlá robia v hre, a nie v ponuke
PlayBoard pridá na hraciu plochu novú dlaždicu a potom presunie všetko na doske o jedno miesto nižšie
clearLCD čistí LCD displeje a zaisťuje, že za dlaždicami nezostanú žiadni duchovia
DrawBoard prejde cez arrGame a vytlačí ho na LCD
clearBoard vymaže celý arrGame, keď hra nie je v hre
bottomCheck kontroluje v spodnej časti arrGame stav poruchy
titul zobrazuje v hre názov hry a skóre
ponuka tlačidiel ovláda, čo robia vstupy používateľa, keď sú v ponuke.
gameOver je ďalšou funkciou, aj keď sa tu nevolá, ale namiesto toho sa nazýva funkciami bottomCheck a buttonsGame.
Krok 5: Funkcia ClearLCD
na vytvorenie funkcie začneme jej pridaním do kódu
void functionName () {
}
„názov funkcie“môže byť čokoľvek, pokiaľ ešte neexistuje.
Skopírujte tento kód do svojho programu:
neplatné clearLcd () {for (int i = 0; i <= 15; i ++) {for (int ii = 0; ii <= 1; ii ++) {lcdLeft.setCursor (i, ii); lcdLeft.write (""); lcdRight.setCursor (i, ii); lcdRight.write (""); }}}
toto beží celým poľom pomocou 2 spočítaných slučiek, ktoré prejdú každým bodom na LCD a napíšu medzeru.
Bez toho, aby sa LCD displej resetoval na nič, zachová všetko, čo bolo predtým napísané
Krok 6: Funkcia DrawBoard
skopírujte tento kód do svojho programu
void drawBoard () {for (int i = 1; i <= 15; i ++) {// nakreslite naľavo LCD stĺpce 1 a 2 // ak dlaždica = 0 nenapíše nič, = 1 napíše „#“, = 2 napísať "@" lcdLeft.setCursor (i, 1); // nastavený na prvý stĺpček (najviac vľavo) if (arrGame [0] == 1) {lcdLeft.write ("#");} if (arrGame [0] == 2) {lcdLeft.write ("@");} lcdLeft.setCursor (i, 0); // nastavený na druhý stĺpček (vľavo v strede) if (arrGame [1] == 1) {lcdLeft.write ("#");} if (arrGame [1] == 2) {lcdLeft.write ("@");} lcdRight.setCursor (i, 1); // nastavený na tretí stĺpček (v strede vpravo) if (arrGame [2] == 1) {lcdRight.write ("#");} if (arrGame [2] == 2) {lcdRight.write ("@");} lcdRight.setCursor (i, 0); // nastavený na štvrtý stĺpček (úplne vpravo) if (arrGame [3] == 1) {lcdRight.write ("#");} if (arrGame [3] == 2) {lcdRight.write ("@");}}}
toto používa slučku na prechádzanie každým riadkom dosky, potom skontroluje, či sa niektorý stĺpec v riadku rovná 1 alebo 2, na základe toho potom vytlačí na LCD displej buď hashtag, zatiaľ čo dlaždica ešte nie je hit, alebo @ pre dlaždicu zásahu.
Krok 7: Funkcia PlayBoard
skopírujte tento kód do svojho programu.
void playBoard () {for (int i = 0; i <= 3; i ++) {arrGame [0] = 0;} // vymazanie horného riadku arrGame [0] [náhodný (0, 4)] = 1; // nastavenie náhodného bodu v hornom riadku ako dlaždice (int i = 15; i> = 1; i-) {// práca od spodnej časti dosky po vrchol pre (int ii = 0; ii <= 3; ii ++) {// pre každú kolóniu arrGame [ii] = arrGame [i - 1] [ii]; }}}
tento kód začína vymazaním celého horného riadka na 0 alebo žiadna dlaždica a potom nastaví jednu náhodnú dlaždicu na 1 a dlaždicu zruší.
Potom prejde počítanou slučkou v opačnom poradí, od 15 do 1, pričom riadok sa nastaví na rovnaký, ako sa rovná riadku nad ním, čím sa doska posunie nadol po displeji LCD.
Krok 8: Funkcia ClearBoard
skopírujte tento kód do svojho programu.
void clearBoard () {// reset hodnôt tick a delay intTick = 0; intDelay = 1000; // prejdi doskou a nastav všetko na 0 pre (int i = 0; i <= 15; i ++) {for (int ii = 0; ii <= 3; ii ++) {arrGame [ii] = 0; }}}
Tento kód sa spustí, keď sa hra nehrá, aby ste sa presvedčili, že celý arrGame je nastavený na 0 alebo žiadne dlaždice pomocou spočítaných slučiek na prechádzanie poľom.
Kód tiež vynuluje hodnoty intDelay a intTick.
Krok 9: Funkcia názvu
skopírujte nasledujúci kód do svojho programu
neplatný názov () {// napíšte názov na LCD a miesto pre skóre lcdRight.setCursor (0, 0); lcdRight.write ("Klavírne dlaždice"); lcdRight.setCursor (0, 1); lcdRight.write ("Skóre:"); // preveďte skóre na reťazec char strScore [3]; sprintf (strScore, "%d", intScore); // zobrazenie skóre na LCD lcdRight.write (strScore); // pridajte diffictuly lcdRight.setCursor (10, 1); if (intDiff == 0) {lcdRight.write ("Jednoduché"); } if (intDiff == 1) {lcdRight.write ("Medium"); } if (intDiff == 2) {lcdRight.write ("Hard"); } // Trochu stlačte príkaz lcdLeft.setCursor (0, 0); lcdLeft.write ("stlačte Enter"); lcdLeft.setCursor (0, 1); lcdLeft.write („začať!“); }
Tento kód napíše na LCD obrazovku názov hry a skóre, a to tak, že pomocou LCD.setCursor oznámi LCD, kde má začať písať, a potom napíše reťazec do LCD.write.
Tu sa tiež vytvorí nová premenná strScore, ktorá sa používa na konverziu intScore na dátový typ reťazec alebo char pomocou funkcie sprintf.
Tu sa používa aj intDiff, na základe svojich hodnôt vytlačí rôzne možnosti obtiažnosti.
Krok 10: Funkcia ponuky Buttons
vložte do programu nasledujúci kód
neplatné tlačidláMenu () {// po stlačení klávesu Enter spustíte hru a vynulujete hodnotu skóre, ak (intEnter == 1) {bolPlay = true; intScore = 0; playBoard (); drawBoard (); } // keď je stlačené tlačidlo 3 zapnúť ladenie možnosť tlače dosky na sériovú linku if (intInput == 3) {if (bolSerialBoard == false) {Serial.println ("Serial Board Active"); bolSerialBoard = true; } else {Serial.println ("Serial Board Disabled"); bolSerialBoard = false; }} // nastavte rýchlosť hry na jednoduchú obtiažnosť, ak (intInput == 0) {Serial.print ("Hra je nastavená na ľahkú ("); Serial.print (intGameSpeedEasy); Serial.println ("akcelerácia ms)"); intDiff = 0; intGameSpeed = intGameSpeedEasy; } // nastavte rýchlosť hry na strednú obtiažnosť, ak (intInput == 1) {Serial.print ("hra nastavená na strednú ("); Serial.print (intGameSpeedMedium); Serial.println ("akcelerácia ms)"); intDiff = 1; intGameSpeed = intGameSpeedMedium; } // nastavte rýchlosť hry na ťažkú obtiažnosť, ak (intInput == 2) {Serial.print ("Hra je nastavená na tvrdú ("); Serial.print (intGameSpeedHard); Serial.println ("akcelerácia ms)"); intDiff = 2; intGameSpeed = intGameSpeedHard; }}
tento kód sa spustí iba vtedy, keď sa bolPlay v neplatnej slučke rovná false
ak je intEnter nastavený na 1, znamená to, že bolo stlačené tlačidlo Enter, ak je stlačené, program nastaví bolPlay na true a hra sa spustí.
Program potom prečíta, čomu sa rovná intInput. ak sa rovná 0, stlačí sa prvé tlačidlo zľava, pričom sa prejde doprava až na 3. Ak sa intInput rovná 4, nestlačí sa žiadne tlačidlo.
ak sú stlačené tlačidlá 0-2, hra zmení obtiažnosť a upraví aj hodnotu rýchlosti hry, čo znamená, že sa bude zrýchľovať rýchlejšie.
ak je stlačené tlačidlo 3, hra aktivuje alebo deaktivuje režim ladenia, kde sa celá doska vytlačí na sériovom monitore, aby pomohla pri hľadaní problémov v programe.
Krok 11: Funkcia ButtonsGame
skopírujte nasledujúci kód do svojho programu
neplatné buttonsGame () {if (intInput! = 4) {// ak je stlačené tlačidlo, ak (bolTilePressed == false) {// iba ak bolTilePressed je falošná spúšťacia akcia na kontrolu stlačenia tlačidla bolTilePressed = true; // potom nastavte bolTilePressed na true, aby ste sa uistili, že nie je kyslo spustený znova int intLowestTile = 0; // nastaví sa na dlaždicu s najnižšou dlaždicou int intCheckedTile = 15; // ak chcete sledovať, ktoré dlaždice boli skontrolované, kým (intLowestTile == 0) {// pokiaľ nie je nastavené nič, kontrolujte dlaždice (int i = 0; i 100) {// tak dlho, ako int oneskorenie nie je nižšie ako 100 intDelay = intDelay - 20; // z toho vezmite hodnotu}} else {Serial.println ("Je stlačené nesprávne tlačidlo"); koniec hry(); // inak koniec hry}}}}}
Kód sa spustí iba vtedy, ak sa bolPlay v neplatnej slučke rovná true.
Rovnako ako tlačidláMenu na základe hodnoty intInput kontroluje, či hráč narazil na dlaždicu alebo ju minul.
To sa deje tak, že prejdete arrGame zdola nahor pomocou slučky while a pomocou dlaždice Unit vyhľadáte, ktorý riadok je najnižší. Potom skontroluje, či miesto v tomto riadku zodpovedajúce stlačenému tlačidlu je dlaždica zrušiť alebo nie, ak nie je, nastaví ju na hodnotu 2 namiesto 1, čo znamená, že sa zobrazí ako @, v opačnom prípade spustí hru. funkciu, ktorú ešte len vytvoríme.
Táto funkcia tiež používa premennú bolTilePressed tak, že ju nastaví na hodnotu true pri stlačení tlačidla a na hodnotu false, ak nestlačíte žiadne tlačidlo. To má zaistiť, aby používateľ omylom neprišiel o hru, pretože si program myslel, že stlačili tlačidlo viackrát, keď ho podržali.
Krok 12: Funkcia GameOver
Skopírujte nasledujúci kód do svojho programu
void gameOver () {Serial.println ("Game Over!"); Serial.print ("Vaše skóre bolo:"); Serial.println (intScore); Serial.print ("Vaša rýchlosť bola:"); Serial.println (intDelay); bolPlay = false; }
Toto je spustené funkciami checkBottom alebo buttonsGame a spustí sa koniec hry nastavením bolPlay na hodnotu false.
Tiež vytlačí správu na sériový monitor pre skóre používateľov a dlaždice rýchlosti boli pridané v milisekundách.
Krok 13: Vstupná funkcia
Skopírujte nasledujúci kód do svojho programu.
neplatný vstup () {intEnter = digitalRead (btnEnter); // read enter // prečítaj, ktorý z ostatných vstupov, alebo ak žiadny nie je nastavený na 4 if (digitalRead (btn1) == HIGH) {intInput = 0;} else {if (digitalRead (btn2) == HIGH) {intInput = 1;} else {if (digitalRead (btn3) == HIGH) {intInput = 2;} else {if (digitalRead (btn4) == HIGH) {intInput = 3;} else {intInput = 4; }}}} // sériová tlač vstupov if (intEnter == 1) {Serial.println ("Enter Pressed!");} if (intInput! = 4) {Serial.print ("Button Press:"); Serial.println (intInput); } else {// ak nie je stlačené žiadne tlačidlo reset bolTilePressed bolTilePressed = false; }}
Tento kód sa používa s funkciami buttonsGame a buttonsMenu. na základe tlačidiel, ktoré používateľ stlačil, nastaví hodnotu intInput, alebo ak nie je stlačené žiadne tlačidlo, nastaví intInput na hodnotu 4.
Ak nie je stlačené žiadne tlačidlo, bolTilePressed sa resetuje pre funkciu buttonsGame.
Tiež vytlačí správu na sériový monitor, na ktorom je stlačené tlačidlo.
Krok 14: Funkcia BottomCheck
skopírujte nasledujúci kód do svojho programu.
void bottomCheck () {for (int i = 0; i <= 3; i ++) {// for the 4 columns if (arrGame [15] == 1) {// if a tile is at the bottom Serial.println („Dlaždica v spodnej časti“); arrGame [15] = 2; drawBoard (); oneskorenie (400); arrGame [15] = 1; drawBoard (); oneskorenie (400); arrGame [15] = 2; drawBoard (); oneskorenie (400); arrGame [15] = 1; drawBoard (); oneskorenie (400); koniec hry(); }}}
pomocou slučky tento kód skontroluje v dolnom rade arrGame, či neobsahuje dlaždice bez úprav (dlaždice rovnajúce sa 1), ak je v spodnej časti obrazovky dlaždica bez ignorovania, dlaždica bliká a potom spustí funkciu over -game.
Krok 15: Funkcia WriteSerial
skopírujte nasledujúci kód do svojho programu
void writeSerial () {if (bolSerialBoard == true) {for (int i = 0; i <= 15; i ++) {for (int ii = 0; ii <= 3; ii ++) {Serial.print (arrGame [ii]); Serial.print (","); } Serial.println (""); }}}
Toto je funkcia, po ktorej nasleduje možnosť ladenia, ktorú je možné povoliť vo funkcii buttonsMenu. Ak je bolSerialBoard v tejto funkcii nastavený na hodnotu true, prejde cez arrGame a vytlačí celú dosku na sériový monitor na testovacie účely pomocou poľa.
Krok 16: Dokončenie
Celý váš kód by nemal byť úplný a mal by vyzerať asi takto!
/ * * Názov - Klavírne dlaždice; Arduino * Od - Domenic Marulli * Dátum - 11/ *
/ zahŕňajú knižnice
#zahrnúť
// tieto premenné sú možnosti, ktoré môžete zmeniť - vyššie čísla = rýchlejšie zrýchlenie hry
int intGameSpeedEasy = 10; int intGameSpeedMedium = 25; int intGameSpeedHard = 80;
// Definujte piny
#define btnZadajte A0 #define btn1 15 #define btn2 16 #define btn3 17 #define btn4 18
// vytváranie objektov LCD (n, ~, n, ~, ~, n)
LiquidCrystal lcdLeft (8, 9, 12, 10, 11, 13); LiquidCrystal lcdRight (2, 3, 4, 5, 6, 7);
// nastavenie herného poľa
int arrGame [16] [4] = {{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, 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}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}};
// nastavenie premenných pre hru
booleovský bolPlay; // sleduje, ak prehrávač int intScore; // sleduje skóre hráča int intDiff; // len estetická vec, ktorá hovorí, na akej obtiažnosti je hra
// nastavenie premenných pre vstup
int intEnter; // sleduje, ak užívateľ stlačí tlačidlo enter int intInput; // sleduje, ktoré tlačidlá používateľ stlačí boolean bolTilePressed; // zaistite, aby hráč omylom nestlačil tlačidlo 5x a prehral
// nastavenie premenných pre turn
int intTick; // počíta počítadlá (na slučku) do intDelay int intDelay; // čas, ktorý program čaká na ďalšie otočenie v milis int intGameSpeed;
// ukončenie možností ladenia
booleovský bolSerialBoard; // keď true, doska sa vytlačí v sériovom monitore
// nastavenie, ktoré sa spustí raz
void setup () {Serial.begin (9600); // spustenie sériového monitora // nastavenie premenných bolPlay = false; intScore = 0; intTick = 0; intDelay = 1000; intDiff = 1; intGameSpeed = intGameSpeedMedium; // begin lcd's lcdLeft.begin (16, 2); lcdRight.begin (16, 2); }
// cyklus, ktorý sa spustí každých 10 milisekúnd
void loop () {vstup (); // skontrolujte, či sa prehráva vstup, ak (bolPlay == true) {if (intTick> = intDelay) {// skontrolujte, či sa má hra hrať na ťah alebo pokračovať v čakaní Serial.println ("~~~~~~~ ~~ "); // tlač na označenie dosky pohybujúcej sa na // writeSerial (); // ak je možnosť zapnutá, zapíšte dosku do sériových tlačidielGame (); // kontrola vstupov hráča playBoard (); // presuňte dosku a pridajte novú dlaždicu clearLcd (); // vyčistite LCD pred kreslením drawBoard (); // nakreslite dosku na lcd's bottomCheck (); intTick = 0; // reset intTick} else {buttonsGame (); // kontrola vstupov hráča clearLcd (); // vyčistite LCD pred kreslením drawBoard (); // nakreslite dosku na lcd's intTick = intTick + intGameSpeed; // pridať do kliešťa}} else {clearLcd (); // vyčistite LCD pred kreslením title (); // zobrazenie tlačidiel informácií o názve a skóreMenu (); // čítať vstup prehrávača clearBoard (); // zaistenie celej dosky = 0} zdržanie (10); // oneskorenie arduina o malú chvíľu}
// vyčistí LCD, takže v ňom nezostanú žiadne nezadané bunky
neplatné clearLcd () {for (int i = 0; i <= 15; i ++) {for (int ii = 0; ii <= 1; ii ++) {lcdLeft.setCursor (i, ii); lcdLeft.write (""); lcdRight.setCursor (i, ii); lcdRight.write (""); }}}
// nakreslí tabuľu na LCD
void drawBoard () {for (int i = 1; i <= 15; i ++) {// nakreslite naľavo LCD stĺpce 1 a 2 // ak dlaždica = 0 nenapíše nič, = 1 napíše „#“, = 2 napísať "@" lcdLeft.setCursor (i, 1); // nastavený na prvý stĺpček (najviac vľavo) if (arrGame [0] == 1) {lcdLeft.write ("#");} if (arrGame [0] == 2) {lcdLeft.write ("@");} lcdLeft.setCursor (i, 0); // nastavený na druhý stĺpček (vľavo v strede) if (arrGame [1] == 1) {lcdLeft.write ("#");} if (arrGame [1] == 2) {lcdLeft.write ("@");} lcdRight.setCursor (i, 1); // nastavený na tretí stĺpček (v strede vpravo) if (arrGame [2] == 1) {lcdRight.write ("#");} if (arrGame [2] == 2) {lcdRight.write ("@");} lcdRight.setCursor (i, 0); // nastavený na štvrtý stĺpček (úplne vpravo) if (arrGame [3] == 1) {lcdRight.write ("#");} if (arrGame [3] == 2) {lcdRight.write ("@");}}}
// posunie dosku nadol a umiestni náhodnú hodnotu ako dlaždicu
void playBoard () {for (int i = 0; i <= 3; i ++) {arrGame [0] = 0;} // vymazanie horného riadku arrGame [0] [náhodný (0, 4)] = 1; // nastavenie náhodného bodu v hornom riadku ako dlaždice (int i = 15; i> = 1; i-) {// práca od spodnej časti dosky po vrchol pre (int ii = 0; ii <= 3; ii ++) {// pre každú kolóniu arrGame [ii] = arrGame [i - 1] [ii]; }}}
// nastaví celú dosku na 0 a resetuje premenné na predohru
void clearBoard () {// reset hodnôt tick a delay intTick = 0; intDelay = 1000; // prejdi doskou a nastav všetko na 0 pre (int i = 0; i <= 15; i ++) {for (int ii = 0; ii <= 3; ii ++) {arrGame [ii] = 0; }}}
// zobrazí hlavnú ponuku na LCD displejoch
neplatný názov () {// napíšte názov na LCD a miesto pre skóre lcdRight.setCursor (0, 0); lcdRight.write ("Klavírne dlaždice"); lcdRight.setCursor (0, 1); lcdRight.write ("Skóre:"); // preveďte skóre na reťazec char strScore [3]; sprintf (strScore, "%d", intScore); // zobrazenie skóre na LCD lcdRight.write (strScore); // pridajte diffictuly lcdRight.setCursor (10, 1); if (intDiff == 0) {lcdRight.write ("Jednoduché"); } if (intDiff == 1) {lcdRight.write ("Medium"); } if (intDiff == 2) {lcdRight.write ("Hard"); } // Trochu stlačte príkaz lcdLeft.setCursor (0, 0); lcdLeft.write ("stlačte Enter"); lcdLeft.setCursor (0, 1); lcdLeft.write („začať!“); }
// kontroluje tlačidlá a čo majú robiť, keď sú mimo hry
neplatné tlačidláMenu () {// po stlačení klávesu Enter spustíte hru a vynulujete hodnotu skóre, ak (intEnter == 1) {bolPlay = true; intScore = 0; playBoard (); drawBoard (); } // keď je stlačené tlačidlo 3 zapnúť ladenie možnosť tlače dosky na sériovú linku if (intInput == 3) {if (bolSerialBoard == false) {Serial.println ("Serial Board Active"); bolSerialBoard = true; } else {Serial.println ("Serial Board Disabled"); bolSerialBoard = false; }} // nastavte rýchlosť hry na jednoduchú obtiažnosť, ak (intInput == 0) {Serial.print ("Hra je nastavená na ľahkú ("); Serial.print (intGameSpeedEasy); Serial.println ("akcelerácia ms)"); intDiff = 0; intGameSpeed = intGameSpeedEasy; } // nastavte rýchlosť hry na strednú obtiažnosť, ak (intInput == 1) {Serial.print ("hra nastavená na strednú ("); Serial.print (intGameSpeedMedium); Serial.println ("akcelerácia ms)"); intDiff = 1; intGameSpeed = intGameSpeedMedium; } // nastavte rýchlosť hry na ťažkú obtiažnosť, ak (intInput == 2) {Serial.print ("Hra je nastavená na tvrdú ("); Serial.print (intGameSpeedHard); Serial.println ("akcelerácia ms)"); intDiff = 2; intGameSpeed = intGameSpeedHard; }}
// kontroluje tlačidlá a čo majú robiť, keď sú v hre
void buttonsGame () {if (intInput! = 4) {// ak je stlačené tlačidlo, ak (bolTilePressed == false) {// iba ak bolTilePressed je falošná spúšťacia akcia na kontrolu stlačenia tlačidla bolTilePressed = true; // potom nastavte bolTilePressed na true, aby ste sa uistili, že nie je kyslo spustený znova int intLowestTile = 0; // nastaví sa na dlaždicu s najnižšou dlaždicou int intCheckedTile = 15; // ak chcete sledovať, ktoré dlaždice boli skontrolované, kým (intLowestTile == 0) {// pokiaľ nie je nastavené nič, kontrolujte dlaždice (int i = 0; i 100) {// tak dlho, ako int oneskorenie nie je nižšie ako 100 intDelay = intDelay - 20; // z toho vezmite hodnotu}} else {Serial.println ("Je stlačené nesprávne tlačidlo"); koniec hry(); // inak koniec hry}}}}}
neplatná hraOver () {
Serial.println („Hra skončila!“); Serial.print ("Vaše skóre bolo:"); Serial.println (intScore); Serial.print ("Vaša rýchlosť bola:"); Serial.println (intDelay); bolPlay = false; }
// kontroluje vstup hráča
neplatný vstup () {intEnter = digitalRead (btnEnter); // read enter // prečítaj, ktorý z ďalších vstupov, alebo ak žiadny nie je nastavený na 4 if (digitalRead (btn1) == HIGH) {intInput = 0;} else {if (digitalRead (btn2) == HIGH) {intInput = 1;} else {if (digitalRead (btn3) == HIGH) {intInput = 2;} else {if (digitalRead (btn4) == HIGH) {intInput = 3;} else {intInput = 4; }}}} // sériová tlač vstupov if (intEnter == 1) {Serial.println ("Enter Pressed!");} if (intInput! = 4) {Serial.print ("Button Press:"); Serial.println (intInput); } else {// ak nie je stlačené žiadne tlačidlo reset bolTilePressed bolTilePressed = false; }}
// skontroluje zlyhanie spodnej časti dosky
void bottomCheck () {for (int i = 0; i <= 3; i ++) {// for the 4 columns if (arrGame [15] == 1) {// if a tile is at the bottom Serial.println („Dlaždica v spodnej časti“); arrGame [15] = 2; drawBoard (); oneskorenie (400); arrGame [15] = 1; drawBoard (); oneskorenie (400); arrGame [15] = 2; drawBoard (); oneskorenie (400); arrGame [15] = 1; drawBoard (); oneskorenie (400); koniec hry(); }}}
// ak je bolSerialBoard pravdivý, vytlačí dosku na sériový monitor
void writeSerial () {if (bolSerialBoard == true) {for (int i = 0; i <= 15; i ++) {for (int ii = 0; ii <= 3; ii ++) {Serial.print (arrGame [ii]); Serial.print (","); } Serial.println (""); }}}
Akonáhle je zadaný celý kód, nahrajte ho do svojho arduina a užívajte si!
Odporúča:
Ako: Inštalácia Raspberry PI 4 bezhlavého (VNC) s obrazovým procesorom Rpi a obrázkami: 7 krokov (s obrázkami)
Ako na to: Inštalácia Raspberry PI 4 bez hlavy (VNC) s obrázkom Rpi a obrázkami: Plánujem použiť tento nástroj Rapsberry PI v mnohých zábavných projektoch späť na mojom blogu. Neváhajte sa na to pozrieť. Chcel som sa vrátiť k používaniu svojho Raspberry PI, ale na novom mieste som nemal klávesnicu ani myš. Chvíľu to bolo, odkedy som nastavil Raspberry
Počítadlo krokov - mikro: bit: 12 krokov (s obrázkami)
Počítadlo krokov - mikro: bit: Tento projekt bude počítadlom krokov. Na meranie našich krokov použijeme senzor akcelerometra, ktorý je vstavaný v Micro: Bit. Zakaždým, keď sa Micro: Bit zatrasie, pridáme k počtu 2 a zobrazíme ho na obrazovke
Bolt - Nočné hodiny pre bezdrôtové nabíjanie DIY (6 krokov): 6 krokov (s obrázkami)
Bolt - Nočné hodiny bezdrôtového nabíjania DIY (6 krokov): Indukčné nabíjanie (tiež známe ako bezdrôtové nabíjanie alebo bezdrôtové nabíjanie) je typ bezdrôtového prenosu energie. Na prenos elektriny do prenosných zariadení používa elektromagnetickú indukciu. Najbežnejšou aplikáciou je bezdrôtové nabíjanie Qi
Ako rozobrať počítač pomocou jednoduchých krokov a fotografií: 13 krokov (s obrázkami)
Ako rozobrať počítač jednoduchými krokmi a obrázkami: Toto je návod, ako rozobrať počítač. Väčšina základných komponentov je modulárna a dá sa ľahko odstrániť. Je však dôležité, aby ste o tom boli organizovaní. Pomôže to zabrániť strate súčiastok a tiež pri opätovnej montáži
Najlacnejšie Arduino -- Najmenšie Arduino -- Arduino Pro Mini -- Programovanie -- Arduino Neno: 6 krokov (s obrázkami)
Najlacnejšie Arduino || Najmenšie Arduino || Arduino Pro Mini || Programovanie || Arduino Neno: …………………………. REGISTRUJTE SA na môj kanál YouTube pre ďalšie videá ……. . Tento projekt je o tom, ako prepojiť najmenšie a najlacnejšie arduino vôbec. Najmenším a najlacnejším arduino je arduino pro mini. Je to podobné ako arduino