Stwórz grę Arduino opartą na kontrolerze SNES: 8 kroków

Stwórz grę Arduino opartą na kontrolerze SNES: 8 kroków

Spisu treści:

Anonim

W tym podręczniku pokażę ci, jak wziąć kontroler SNES, podłączyć go do Arduino i stworzyć prostą grę Simon Says.

Może to być wykorzystane do stworzenia bardziej złożonej gry, a może nawet do stworzenia mini-konsoli opartej na Arduino. Ostatecznie otrzymam wideo z gry w akcji, ale nie wiem kiedy.

Kieszonkowe dzieci:

Krok 1: Potrzebne materiały

Potrzebne materiały są następujące:

-1 Arduino

-1 mała deska do krojenia chleba

-1 stary kontroler SNES, który nie miałby nic przeciwko, żeby się rozerwać

-10-15 przewodów połączeniowych (używam 11)

-5 diod LED

-taśma

Krok 2: Podłącz wszystkie przewody do Arduino

Podłącz przewody połączeniowe do styków 2-9 arduino. Zobacz poniżej, aby zobaczyć, co robi każdy pin, wraz z moim zalecanym schematem kolorów.

Pin 2: Pin Strobe. Łączy się z przewodem Orange z kontrolera, więc zrobię Jumper Pink lub Orange.

Pin 3: Pin zegara. Łączy się z żółtym przewodem z kontrolera, więc polecam żółty skoczek.

Pin 4: Pin danych. Czerwony przewód na kontrolerze, więc najlepszy byłby czerwony skoczek.

Pin 5: Moc dla top led.

Pin 6: Moc dla prawej led.

Pin 7: Moc dla dolnej diody.

Pin 8: Moc dla lewej led.

Szpilki 5-8 powinny mieć ten sam kolorowy przewód połączeniowy. Wybieram Dark Green.

Pin 9: Wskaźnik mocy do gry. Użyłem Jasnozielonego.

5V: pin mocy, łączy się z białym przewodem z kontrolera, więc użyłem białej bluzy.

GND: Brązowy drut od kontrolera, użyłem czarnej bluzy.

GND: Służy do podłączania wszystkich podstaw z płyty breadboard z powrotem do arduino, używam niebieskiego dla wszystkich przewodów uziemiających.

Krok 3: Konfigurowanie diod LED i Breadboard

Umieść diody LED na desce do krojenia w kształcie rombu. Upewnij się, że 2 szpilki LED nie dzielą tego samego wiersza numerowanego. Podłącz wszystkie katody (krótkie szpilki na diodach) do linii naziemnych na desce do krojenia chleba, a następnie podłącz linię uziemienia do jednego z GND na arduino. Połącz zworki na pinach 5-8 z anodami swoich diod LED, odpowiednio do ich pozycji, jak podano w ostatnim kroku.

W przypadku wskaźnika LED gry po prostu odłóż go od innych, podłącz jego anodę do Pin 9, a katodę do szyny uziemiającej.

Krok 4: Podłączenie kontrolera

Do tego momentu w ogóle nie musiałeś zadzierać z kontrolerem. Teraz musisz odciąć plastikową obudowę od końca drutu, aby dostać się do przewodów wewnątrz. Powinny mieć na sobie trochę metalowych końcówek (patrz zdjęcia), więc powinno być całkiem łatwo podłączyć przewody zworki, prawda?

Źle.

Najpierw przyklej przewód kontrolera do biurka za pomocą arduino. Jeśli pozwolisz mu się poruszyć, będziesz miał trudności z nawiązaniem dobrych połączeń. Moje skoczki wyślizgują się z małych metalowych przedmiotów, więc wziąłem scyzoryk i oderwałem ich końce (patrz zdjęcia), aby móc przykleić przewód mostka prostopadle do gniazda. Podłączając 5 przewodów do kontrolera, upewnij się, że nie dotykają się nawzajem i że prawidłowo dopasowujesz kolory.

Krok 5:

W tym momencie powinieneś mieć wszystko prawidłowo podłączone i gotowe do pracy. Pobierz połączony szkic Arduino, skompiluj go, a następnie prześlij do swojego arduino. Aby zagrać, poczekaj, aż dioda wskaźnika gry przestanie migać, a następnie użyj AXBY jako 4 kierunki główne. W następnych kilku krokach spróbuję wyjaśnić kod, ale jeśli wszystko, czego chcesz, to działająca gra, możesz się tutaj zatrzymać.

Simon_Says_snes.ino

Krok 6: Kod, część 1

Najpierw małe tło na temat sposobu, w jaki sterownik wysyła dane. Aby odbierać dane ze sterownika, ustawiasz pin stroboskopowy na wysoki, a następnie odczytujesz pierwszy bit danych (bit najmniej znaczący). Aby uzyskać drugi bit, przełącz pin szpilki, a następnie odczytaj z pinezki danych. Kontynuujesz to 16 razy. Stan kontrolera to 2 bajtowy numer, z 12 najmniej znaczącymi bajtami zawierającymi aktualnie naciskane przyciski, a 4 najbardziej znaczące bajty są bezużyteczne.

Pierwsze 7 linii jest bardzo proste, ponieważ przypisują nazwy do 3 pinów kontrolera i pinów wskaźnika gry.

Linie 8-20 deklarują dane szesnastkowe używane do wykrywania, który przycisk jest naciśnięty na kontrolerze. Każda wartość szesnastkowa włącza osobny bit w strumieniu danych, dzięki czemu można po prostu użyć przesunięć bitowych, aby określić, czy dany przycisk jest naciśnięty, lub po prostu użyć bitwise i.

Zmienna „array” jest tylko tablicą liczb całkowitych o długości 30 int. Przechowuje sekwencję naciśnięć do gry.

„pos” jest zmienną położenia. Więcej na ten temat później.

„timeForPress” oznacza, jak długo musisz naciskać przyciski.

Dalej jest metoda setup (). Zaczynamy od zaszczepienia generatora liczb losowych, a następnie ustawienia trybu pinów dla każdego z pinów 2-9. Następnie otwieramy komunikację szeregową, dla celów debugowania i ustawiamy sekwencję przycisków na wszystkie 4-te. Zrobiłem to b / c system numerowania diod LED idzie tylko do 3, więc 4 jest w zasadzie tylko symbolem zastępczym. Teraz ustawiamy timeForPress na 1000 i wywołujemy metodę genSequence (), która wypełnia naszą tablicę losowymi liczbami całkowitymi od 0 do 3 (włącznie). Następnie ustawia naszą pozycję na 0, aby pokazać, że jeszcze nie rozpoczęła gry, a następnie miga wskaźnik gry, aby pokazać, że gra ma się rozpocząć.

Krok 7: Kod, część 2

W tym kroku szybko omówię metody uzyskiwania danych ze sterownika. Opowiedziałem ci teorię w poprzednim kroku, ale teraz przedstawię rzeczywiste wywołania funkcji.

Myślę, że mam trochę tego kodu z tego pouczającego. Nie do końca jednak.

Istnieją trzy metody sprawdzania wejścia kontrolera:

guziki()

stroboskop ()

shiftin ()

Metoda buttons () najpierw ustawia zmienną zwrotną i licznik miejsc. Następnie błyska (używając strobe ()) i wprowadza pętlę for (). W pętli for odczytuje i przechowuje dane po jednym bitu za pomocą metody shiftin () i operatorów bitowych.

Metoda strobe () jest całkiem prosta. Zasadniczo ustawia pinezkę stroboskopową na HIGH, a następnie natychmiast powraca do LOW. Całkiem proste rzeczy. To mówi kontrolerowi, aby zaczął transmitować dane.

Metoda shiftin () faktycznie odczytuje dane. Pobiera dane z pinezki danych, a następnie przełącza pin zegara, który mówi kontrolerowi, aby wysłał następny bit.

Używając tych trzech metod, możesz odczytać stan kontrolera. Nigdy nie powinieneś bezpośrednio wywoływać strobe () lub shiftin (). Na koniec, podczas sprawdzania, czy przycisk jest wciśnięty, musisz użyć 2 operatorów bitowych. ~ (Tylda) nie jest bitowa i odwraca dane, a następnie & sprawdza stan vs dowolny przycisk, który chcesz nacisnąć.

Krok 8: Kod, część 3

To ostatni krok w stosunku do kodu. Po prostu zamierzam szybko polepszyć działanie pętli gry, ponieważ dla początkującego programisty powinno to być całkiem łatwe do naśladowania.

Metoda loop () rozpoczyna się od seryjnego drukowania stanu kontrolera. Następnie odtwarza sekwencję przechowywaną w tablicy, a następnie sprawdza dane wejściowe użytkownika za pomocą metody readAndCheckInput, która w zasadzie jest tylko pętlą for z kilkoma instrukcjami if. Jeśli się pomylisz, wyłamuje się z pętli i wtedy migająca rzecz się kończy.

Myślę, że to oznacza, że ​​ten tutorial się skończył! Jeśli zrobisz fajne gry, skomentuj i umieść zdjęcie, ponieważ chciałbym je zobaczyć!

Powodzenia!