Spisu treści:

Gra Arduino Space Rocks: 3 kroki
Gra Arduino Space Rocks: 3 kroki

Wideo: Gra Arduino Space Rocks: 3 kroki

Wideo: Gra Arduino Space Rocks: 3 kroki
Wideo: Только не говори никому.. Как легко можно восстановить жидкокристаллический экран.. 2024, Lipiec
Anonim
Gra Arduino Space Rocks
Gra Arduino Space Rocks

Niezależnie od tego, czy są odtwarzane na komputerze, telefonie, konsoli do gier, czy na samodzielnym pudełku, wiele gier wideo zawiera element omijania przeszkód. Jasne, mogą być przyznawane punkty za zbieranie żetonów lub znalezienie drogi przez labirynt, ale bądź pewien, że prawdopodobnie w grze jest coś, czego jedynym celem jest uniemożliwienie ci tego. Pierwszą grą wideo był Pong, ale potem najpopularniejszymi grami były takie gry jak „Asteroids” czy „Pac-Man”. Nowszą odmianą byłaby prosta, ale wciągająca gra „Flappy Birds”.

Ostatnio zobaczyłem, że ktoś stworzył prostą, dwupoziomową wersję „Flappy Bird”, która była odtwarzana na zwykłym 1602 LCD. Pomyślałem, że to może się spodobać wnukom, więc postanowiłem zrobić własną wariację od zera. Wersja 1602 ma tylko dwa poziomy, więc zdecydowałem się użyć wyświetlacza LCD 2004 (20x4), aby nieco zwiększyć trudność gry. Zdecydowałem się również uczynić go bardziej podobnym do „Asteroids”, ponieważ gracz poprowadził „statek” przez labirynt „kosmicznych skał”. Nawet jeśli nie jesteś zainteresowany budowaniem gry, mogą istnieć elementy oprogramowania, które możesz wykorzystać w jednym z własnych projektów.

Krok 1: Sprzęt

Sprzęt komputerowy
Sprzęt komputerowy
Sprzęt komputerowy
Sprzęt komputerowy
Sprzęt komputerowy
Sprzęt komputerowy

Sprzęt może być oparty na praktycznie dowolnej wersji Arduino. Zrobiłem prototypowanie za pomocą Nano, a następnie wypaliłem kod na chipie ATMega328. To ten sam układ, który zastosowano w Nano, ale używanie go samodzielnie pozwala na bardziej kompaktową konstrukcję i mniejsze zużycie energii. Jak widać, zbudowałem układ na małej płytce stykowej, która łączy się z modułem LCD. Innym aspektem, który jest inny, jest to, że Nano działa z częstotliwością 16 MHz przy użyciu zewnętrznego kryształu, ale wybrałem wbudowany oscylator 8 MHz dla układu ATMega328. To oszczędza części i energię.

Wyświetlacz LCD 2004 łączy się z Arduino w taki sam sposób, jak wyświetlacz LCD 1602. Ciekawą różnicą jest adresowanie lokalizacji wyświetlania. Oczywiście jest różnica, ponieważ są cztery linie zamiast dwóch, ale w 2004 roku trzecia linia jest przedłużeniem pierwszej linii, a czwarta linia jest przedłużeniem drugiej linii. Innymi słowy, jeśli masz program testowy, który właśnie wysłał ciąg znaków na LCD, 21. znak pojawi się na początku trzeciej linii, a 41. znak zawinie się z powrotem do początku pierwszej linii. Wykorzystuję tę cechę w oprogramowaniu, aby skutecznie podwoić długość labiryntu.

Postanowiłem, że moja wersja będzie zasilana bateryjnie, więc użyłem zwykłego akumulatora litowo-jonowego 18650, 3,6 V. Wymagało to dodania małej płytki, aby umożliwić ładowanie przez USB, i kolejnej małej płytki, aby zwiększyć napięcie akumulatora do 5 woltów dla wyświetlacza LCD i układu ATMega. Zdjęcia pokazują moduły, których użyłem, ale są też moduły all-in-one, które spełniają obie funkcje.

Krok 2: Oprogramowanie

Oprogramowanie jest takie samo dla układu Nano i ATMega328. Jedyna różnica polega na sposobie programowania. Używam własnej wersji oprogramowania LCD 1602 typu barebone i na tym opiera się oprogramowanie LCD w tym projekcie. Musiałem dodać możliwości, aby zająć się dodatkowymi liniami wyświetlacza z 2004 roku, a także dodać procedury do przesuwania wyświetlacza. Przesunięcie wyświetlacza zapewnia efekt ruchu „skał” za „statekiem”.

Jak wspomniano wcześniej, linie 1 i 3 tworzą okrągłą kolejkę, podobnie jak linie 2 i 4. Oznacza to, że po 20 zmianach linie 1 i 3 są zamieniane, a linie 2 i 4 są zamieniane. Po 40 zmianach linki wracają do swoich pierwotnych pozycji. Z powodu tego zachowania oryginalny 20-znakowy labirynt staje się zupełnie inny, gdy linie się zamieniają. To sprawiło, że życie stało się interesujące, kiedy próbowałem utworzyć labirynt. W końcu właśnie otworzyłem arkusz kalkulacyjny Excela, aby móc wykreślić ścieżkę bez konieczności ciągłej zmiany oprogramowania. Dostarczone tutaj oprogramowanie ma dwie wersje labiryntu (jedna jest wykomentowana), więc możesz wybrać, którą chcesz lub stworzyć własną.

Początkowo chciałem, aby było to na tyle proste, aby młode wnuki mogły w to zagrać, ale chciałem też, aby zawierało dodatkowe wyzwanie, jeśli oni (lub ktoś inny) będą w tym zbyt dobrzy. Gra rozpoczyna się z szybkością zmiany ustawioną na 1 sekundę. Wewnętrzna częstotliwość tików wynosi 50ms, co oznacza, że istnieje 20 interwałów, podczas których można naciskać przyciski góra/dół. W rzeczywistości naciśnięty przycisk zużywa 2 tiki, ponieważ interwał 50 ms jest używany do wykrycia wciśnięcia, a kolejny interwał 50 ms jest używany do oczekiwania na zwolnienie. W domyślnym labiryncie maksymalna liczba naciśnięć wymaganych przed następną zmianą wynosi trzy. Prostym sposobem na zwiększenie trudności gry jest skrócenie czasu między zmianami, tak aby kilka linijek kodu robiło to w miarę wzrostu wyniku. Szybkość zmiany jest ustawiona na przyspieszenie o 50 ms co 20 zmian, przy czym minimalna szybkość jest ograniczona do 500 ms. Zmiana tych parametrów jest łatwa.

Poza zmianą szybkości zmiany, podstawową logiką oprogramowania jest przesunięcie „statku” i ustalenie, czy „statek” zderzył się ze „skałą”. Funkcje te wykorzystują zdefiniowaną tablicę „kamień/przestrzeń”, a także tablicę, która definiuje miejsca pamięci na wyświetlaczu. Licznik przesunięcia odpowiada długości linii wyświetlacza LCD (0-19) i jest używany jako indeks w tych tablicach. Logika jest nieco skomplikowana przez fakt, że linie zamieniają się co 20 zmian. Podobną logikę stosuje się do określenia pozycji „statku”, który może znajdować się na dowolnej z czterech linii.

Wynik dla każdego odtworzenia jest po prostu liczbą przesunięć, które miały miejsce, a wysoki wynik jest zapisywany w wewnętrznej pamięci EEROM mikrokontrolera. Biblioteka EEPROM służy do wykonywania odczytów i zapisów w tej pamięci. Dostępne procedury umożliwiają jednobajtowe odczyty/zapisy oraz odczyt/zapis wartości zmiennoprzecinkowych. Wartość 0xA5 jest przechowywana w pierwszej lokalizacji EEROM, aby wskazać, że zapisano wysoki wynik. Jeśli ta wartość jest obecna po włączeniu zasilania, odczytywana i wyświetlana jest wartość zmiennoprzecinkowa najwyższego wyniku. Jeśli nie ma wartości 0xA5, wywoływana jest procedura inicjująca wysoki wynik do wartości 1. Ta sama procedura jest wywoływana, jeśli pożądane jest zresetowanie wysokiego wyniku. Wysoki wynik jest przywracany do wartości 1 poprzez przytrzymanie jednego z przycisków góra/dół, a następnie chwilowe naciśnięcie przycisku resetowania.

Krok 3: Granie w grę

Grać w gre
Grać w gre
Grać w gre
Grać w gre

Po włączeniu zasilania wyświetlany jest aktualny najlepszy wynik. Po wyświetleniu najlepszego wyniku, labirynt „kamieni” i „statek” są wyświetlane, a gra rozpoczyna się kilka sekund później. Kiedy „statek” uderzy w „kamień”, komunikat „CASH AND BURN” miga kilka razy przed wyświetleniem wyniku gry. Jeśli zostanie uzyskany nowy rekord, ta wiadomość jest również wyświetlana. Nową grę rozpoczyna się, naciskając przycisk resetowania.

Zalecana: