Innehållsförteckning:

Arduino Space Rocks Game: 3 steg
Arduino Space Rocks Game: 3 steg

Video: Arduino Space Rocks Game: 3 steg

Video: Arduino Space Rocks Game: 3 steg
Video: AmazingChina: Modular & Flexible LED TV Wall 2024, Juli
Anonim
Arduino Space Rocks Game
Arduino Space Rocks Game

Oavsett om de spelas på en dator, i en telefon, på en spelkonsol eller på en fristående låda, innehåller många videospel ett element för att undvika hinder. Visst, det kan bli poäng som delas ut för att samla in tokens eller hitta din väg genom en labyrint, men var säker på att det förmodligen finns något i spelet vars enda syfte är att hindra dig från att göra det. Det första tv-spelet var Pong, men efter det var de mest populära spelen saker som "Asteroids" eller "Pac-Man". En nyare variant skulle vara det enkla men beroendeframkallande spelet "Flappy Birds".

Nyligen såg jag att någon hade gjort en enkel tvånivåversion av "Flappy Bird" som spelades på en vanlig 1602 LCD. Jag trodde att det skulle vara något barnbarnen kanske gillar så jag bestämde mig för att göra min egen variant från grunden. 1602 -versionen har bara två nivåer så jag bestämde mig för att använda en 2004 LCD (20x4) istället för att något öka svårigheten att spela. Jag valde också att göra det mer som "Asteroider" genom att låta spelaren leda ett "skepp" genom en labyrint av "rymdstenar". Även om du inte är intresserad av att bygga spelet kan det finnas några delar av programvaran som du kan använda i ett av dina egna projekt.

Steg 1: Hårdvara

Hårdvara
Hårdvara
Hårdvara
Hårdvara
Hårdvara
Hårdvara

Hårdvaran kan baseras på i stort sett vilken som helst Arduino -version. Jag gjorde prototypen med en Nano och brände sedan koden till ett ATMega328 -chip. Det är samma chip som används i Nano men att använda det i sig ger en mer kompakt konstruktion och mindre strömförbrukning. Som du kan se byggde jag kretsen på en liten brödbräda som piggybacks på LCD -modulen. Den andra aspekten som är annorlunda är att Nano körs vid 16-MHz med hjälp av en extern kristall men jag valde att använda den inbyggda 8-MHz-oscillatorn för ATMega328-chipet. Det sparar delar och kraft.

2004 LCD -gränssnittet till Arduino på samma sätt som en 1602 LCD. En intressant skillnad är adresseringen av displayplatserna. Det är uppenbarligen en skillnad eftersom det finns fyra rader istället för två men under 2004 är den tredje raden en förlängning av den första raden och den fjärde raden är en förlängning av den andra raden. Med andra ord, om du hade ett testprogram som just skickade ut en rad tecken till LCD -skärmen, skulle det 21: e tecknet dyka upp i början av den tredje raden och det 41: e tecknet sveper tillbaka till början av den första raden. Jag använder den egenskapen i programvaran för att effektivt fördubbla labyrintens längd.

Jag bestämde mig för att göra min version batteridrivna så jag använde ett vanligt 18650 Li-ion, 3,6-volts batteri. Det krävde att jag lägger till ett litet kort för att möjliggöra USB -laddning och ett annat litet kort för att öka batterispänningen till 5 volt för LCD -skärmen och ATMega -chipet. Bilderna visar modulerna jag använde men det finns också allt-i-ett-moduler som gör båda funktionerna.

Steg 2: Programvara

Programvaran är densamma för både Nano- och ATMega328 -chipet. Den enda skillnaden är i programmeringsmetoden. Jag använder min egen barebones -version av 1602 LCD -programvara och LCD -programvaran i detta projekt är baserad på det. Jag behövde lägga till funktioner för att ta itu med de extra raderna på 2004 -skärmen och lade också till rutiner för att flytta displayen. Displayskiftet ger "stenarnas" rörelseeffekt förbi "skeppet".

Som nämnts tidigare bildar rad 1 och 3 en cirkulär kö och linjer 2 och 4 gör det också. Det betyder att efter 20 skift byts rad 1 och 3 och rad 2 och 4 byts. Efter 40 skift är linjerna tillbaka i sina ursprungliga positioner. På grund av detta beteende blir den ursprungliga labyrinten på 20 tecken helt annorlunda när linjerna byter. Det gjorde livet intressant när jag försökte bilda en labyrint. Jag öppnade äntligen ett Excel -kalkylblad så att jag kunde kartlägga sökvägen utan att behöva ständigt ändra programvaran. Programvaran som tillhandahålls här har två versioner av labyrinten (den ena kommenteras) så att du kan välja vilken du vill ha eller skapa din egen.

Jag ville ursprungligen att det här skulle vara så enkelt att de unga barnbarnen kunde spela det, men jag ville också att det skulle ha en extra utmaning om de (eller någon annan) blev för bra på det. Spelet börjar med skiftfrekvensen inställd på 1 sekund. Den interna ticfrekvensen är 50 ms så det betyder att det finns 20 intervall under vilka upp/ner -knapparna kan tryckas. I själva verket förbrukar en nedtryckt knapp 2 tics eftersom ett 50ms -intervall används för att upptäcka pressen och ett annat 50ms -intervall används för att vänta på släpp. Med standard labyrinten är det maximala antalet tryck som krävs innan nästa skift tre. Det enkla sättet att öka spelets svårighet är att förkorta tiden mellan skift så ett par rader kod gör just det när poängen ökar. Växlingshastigheten är inställd på att snabbas upp med 50 ms var 20: e skift, med minimihastigheten begränsad till 500 ms. Det är lätt att ändra dessa parametrar.

Annat än att ändra skifthastigheten är den primära logiken i programvaran att flytta "skeppet" och att avgöra om "skeppet" har kolliderat med en "sten". Dessa funktioner drar fördel av den definierade "rock/space" -arrayen och även arrayen som definierar minnesplatserna i displayen. Skiftantal motsvarar linjelängden på LCD-skärmen (0-19) och används som ett index för dessa matriser. Logiken kompliceras något av det faktum att linjerna byter var 20: e skift räknas. Liknande logik används för att bestämma positionen för "skeppet" som kan vara på någon av de fyra linjerna.

Poängen för varje spel är helt enkelt räkningen av antalet skift som inträffade och den höga poängen sparas i mikrokontrollerens interna EEROM. EEPROM -biblioteket används för att läsa och skriva till detta minne. De tillgängliga rutinerna tillåter enkel byte läsning/skrivning och läsning/skrivning av flytande punktvärden. Ett värde på 0xA5 lagras på den första EEROM -platsen för att indikera att en hög poäng har sparats. Om det värdet är närvarande vid uppstart, läses och visas floating point -värdet för den höga poängen. Om 0xA5 -värdet inte är närvarande kallas en rutin för att initialisera den höga poängen till ett värde av 1. Samma rutin kallas om en återställning av den höga poängen önskas. Den höga poängen återställs till värdet 1 genom att hålla ned en av upp/ned -knapparna och sedan trycka på återställningsknappen en kort stund.

Steg 3: Spela spelet

Spelar spelet
Spelar spelet
Spelar spelet
Spelar spelet

När strömmen används, visas den aktuella höga poängen. Efter att den höga poängen visas visas labyrinten av "stenar" och "skeppet" och sedan börjar spelet några sekunder senare. När "skeppet" träffar en "sten" blinkar meddelandet "CRASH AND BURN" några gånger innan resultatet visas för spelet. Om en ny hög poäng görs, visas det meddelandet också. Ett nytt spel startas genom att trycka på återställningsknappen.

Rekommenderad: