Lav et SNES Controller-baseret Arduino Game: 8 trin

Lav et SNES Controller-baseret Arduino Game: 8 trin

Indholdsfortegnelse:

Anonim

I dette instruerbare, vil jeg vise dig, hvordan man tager en SNES controller, krog den til en Arduino, og lav et simpelt Simon Says spil.

Dette kunne bruges til at skabe et mere komplekst spil, eller måske endda at forsøge at lave en Arduino-baseret minikonsol. Til sidst vil jeg få en video op af spillet i aktion, men jeg ved ikke hvornår.

forsyninger:

Trin 1: Materialer, der er nødvendige

De nødvendige materialer er som følger:

-1 Arduino

-1 lille brødbræt

-1 gamle SNES controller, som du ikke har noget imod at rive op

-10-15 Jumper-ledninger (jeg bruger 11)

-5 lysdioder

-bånd

Trin 2: Tilslut alle ledningerne til Arduino

Sæt jumperkabler i stifter 2-9 på arduino. Se nedenfor for at se, hvad hver nål gør sammen med min anbefalede farveskema.

Pin 2: Strobe Pin. Forbinder til Orange wire fra controller, så jeg ville gøre Jumper Pink eller Orange.

Pin 3: Clock Pin. Forbinder til gul ledning fra controller, så jeg anbefaler en gul jumper.

Pin 4: Data Pin. Rød ledning på controller, så en rød jumper ville være bedst.

Pin 5: Power for top led.

Pin 6: Strøm til højre ledet.

Pin 7: Strøm til bundled.

Pin 8: Strøm til venstre ledet.

Pins 5-8 skal have samme farvede jumpertråd. Jeg vælger Dark Green.

Pin 9: Strøm til spilindikator ledet. Jeg brugte lysegrøn.

5V: Power pin, tilsluttes hvid wire fra controller, så jeg brugte en hvid jumper.

GND: Brun tråd fra controller, jeg brugte en sort jumper.

GND: Bruges til at forbinde alle grunde fra breadboard tilbage til arduino, jeg bruger blå til alle jordledninger.

Trin 3: Opsætning af lysdioder og brødbræt

Placer dine lysdioder på brødbrættet i en diamantform. Sørg for, at ingen 2 LED-stifter deler samme nummererede række. Wire alle katoderne (korte stifter på ledninger) til jordlinjen på dit brødbræt, og hæk derefter jordlinjen til en af ​​GND'erne på arduino. Forbind jumperne på Pins 5-8 til LED'ernes Anoder, svarende til deres position, som angivet i sidste trin.

For spillet indikator LED, bare sætte den væk fra de andre, tilslut sin anode til Pin 9, og dens katode til jorden skinne.

Trin 4: Tilslutning af controlleren

Indtil dette punkt har du ikke haft det at kaste med controlleren overhovedet. Nu skal du skære plastikhuset af enden af ​​ledningen, så du kan komme til ledningerne inde. De bør have nogle små metalender på dem (se billeder), så det skal være ret nemt at tilslutte jumperkabler, right?

Forkert.

Først tape styreenhedens ledning til skrivebordet af arduino. Hvis du lader det flytte, har du svært ved at lave gode forbindelser. Mine jumperkabler glider lige ud af de små metal ting, så jeg tog en lommekniv og priede enderne fra hinanden (se billeder), så jeg kunne holde jumperkablet vinkelret ind i stikket. Når du holder de 5 ledninger op til controlleren, skal du sørge for at de ikke rører hinanden, og at du matcher farverne korrekt.

Trin 5:

På dette tidspunkt skal du have alt korrekt kablet og klar til at gå. Download den linkede Arduino skitse, kompilere den, og upload den derefter til din arduino. Hvis du vil afspille, skal du vente på, at indikatoren for spilindikator holder op med at blinke, og brug derefter AXBY som de 4 kardinale retninger. I de næste par trin vil jeg forsøge at forklare koden, men hvis alt du ønsker er et arbejdsspil, kan du stoppe her.

Simon_Says_snes.ino

Trin 6: Koden, del 1

Først en lille baggrund om, hvordan controlleren sender data. For at modtage data fra controlleren, sætter du strobe pin til høj, så læs din første bit data (mindst signifikant bit). For at få den anden bit, skifter du uretappen, læs derefter fra datapinden. Du fortsætter med at gøre dette 16 gange. Tilstanden til controlleren er et 2 byte nummer, med de 12 mindst signifikante bytes, der indeholder de knapper, der aktuelt trykkes, og de 4 mest signifikante byte er ubrugelige.

Så de første 7 linjer er ret enkle, fordi de bare tildeler navne til de 3 styringstifter og spilindikatorstiften.

Linjer 8-20 erklærer de hex-data, der bruges til at registrere, hvilken knap der trykkes på regulatoren. Hver hex-værdi tænder en separat bit i datastrømmen, så du kan bare bruge bitskift til at bestemme, om en bestemt knap trykkes eller bare bruge bitvis og.

Den variable 'array' er blot en matrix af heltal, der er 30 tommer lang. Dette lagrer sekvensen af ​​presser til spillet.

'pos' er en positionsvariabel. Mere om det senere.

'timeForPress' er hvor længe du skal trykke på knapperne.

Op næste er opsætningen (). Vi begynder med at se den tilfældige talgenerator og derefter indstille pin-tilstanden for hver af stifterne 2-9. Derefter åbner vi seriel kommunikation, til debugging, og indstiller rækkefølgen af ​​knapper til alle '4'erne. Jeg gjorde dette b / c nummereringssystemet for LED'erne går kun op til 3, så 4 er i det væsentlige bare en pladsholder. Nu sætter vi timeForPress til 1000, og kalder genSequence () -metoden, som fylder vores array med tilfældige heltal mellem 0 og 3 (inklusive). Derefter sætter den vores position til 0 for at vise, at den endnu ikke har startet spillet, og så blinker spilletindikatoren for at vise, at spillet er ved at begynde.

Trin 7: Koden, del 2

I dette trin vil jeg hurtigt dække de metoder, der bruges til at hente data fra controlleren. Jeg fortalte dig teorien i det foregående trin, men nu vil jeg udklare de aktuelle funktionsopkald.

Jeg tror jeg fik en lille smule af denne kode fra dette instruerbare. Ikke helt sikker dog.

Der er tre metoder til kontrol af controllerens input:

knapper ()

strobe ()

shiftin ()

Knappen () -metoden indstiller først en returvariabel og en stedtæller. Det strøber derefter (ved hjælp af strobe ()), og går ind i et for () loop. I for loop læses og lagres dataene en bit ad gangen ved hjælp af shiftin () -metoden og bitwise operatørerne.

Metoden strobe () er ret ligetil. I bund og grund sætter blot strobe-stiften til HØJ, så straks tilbage til LOW. Smukke enkle ting. Dette fortæller controlleren at begynde at sende data.

Metoden shiftin () læser faktisk dataene. Det tager dataene fra datapinden, så skifter klokkepinden, som fortæller controlleren at sende den næste bit over.

Brug kun disse tre metoder, du kan læse regulatorens tilstand. Du behøver aldrig at ringe direkte til strobe () eller shiftin (). I sidste ende, når du kontrollerer for at se, om der trykkes på en knap, skal du bruge 2 bitvise operatører. Den ~ (tilde) er bitvis ikke, og inverterer dataene, så & kontrollerer staten tilstanden uanset hvilken knap du vil trykke på.

Trin 8: Koden, del 3

Dette er det sidste trin om koden. Jeg skal bare glasere over driften af ​​spilsløjfen, da det burde være ret nemt at følge for en nybegynder programmør.

Løkken () -metoden starter ved serielt udskrivning af controllerens tilstand. Den afspiller så den sekvens, der er gemt i arrayet, og kontrollerer derefter brugerens input med readAndCheckInput-metoden, som i det væsentlige kun er en for-loop med nogle hvis erklæringer i den. Hvis du får en forkert, bryder den ud af løkken og slutter den blinkende ting.

Jeg gætter det betyder, at denne vejledning er forbi! Hvis du laver nogle seje spil, vær venlig at kommentere og sæt et billede, som jeg ville elske at se dem!

Held og lykke!