Arduino-pohjainen käsikonsoli

14/11/2018

Päivitys 27.12.2018

Ajattelin tehdä OLED-käsikonsolista avoimen kaikille. Jaan kaikki koodit GitHubiin ja laitan EasyEDA:lla tehdyt piirilevyt julkiseksi.

Projekti siis lötyy painamalla tästä!


Oletko koskaan haaveillut rakentavasi oman käsikonsolin? Oletko ajatellut sen olevan mahdotonta Arduinolla riittämättömän muistin ja prosessointitehon takia?

Niin minäkin ajattelin muutama vuosi taaksepäin. Ennakkoluuloja vauhditti heikko koodaamistaito, johon ajatus sitten tyssäsi. Ajatus kuitenkin jäi kalvamaan ja lopulta päätin, että opettelen koodaamaan edes sen verran, että saan kuuluisan Pong-pelin koodattua.

Pikakelaus vuoteen 2017. Pong-pelin koodaus olikin ennalta-arvaamattoman helppoa. Kimpoaminen tapahtui vain muuttamalla suuntaa, riippuen siitä mihin seinään se osui. Pallon kulkurata oli liian helppo päätellä, mutta se oli ensimmäinen toimiva peli, jonka koskaan koodasin omalle alustalleni.


Harmi vain, etten tuolloin ajatellut yhtään projektin jakamista tai dokumentointia. Projektista on kuitenkin koodi ja kytkentäkaavio edelleen tallella. Ehdin jo tehdä uuden version kyseisestä käsikonsolista, jossa on vain yksi peli. Seuraava käsikonsoli painottui hieman enemmän omatekoiseen käyttöjärjestelmään. Voin upottaa videon tähän, jos olet kiinnostunut vilkaisemaan.

Pelin grafiikoissa oli myös muita piirtäjiä kuin minä, mutta jätän nimet mainitsematta. Sen verran mainitsen kuitenkin, että heidän työpanoksensa on korvaamatonta ja tuovat pelihahmoihin erinomaisen säväyksen.


Jos olet kiinnostunut näistä projekteista, vastaathan tähän kyselyyn. Tämän avulla tiedän, jos joku haluaa nähdä nämä projektit ja saada ohjeet niiden valmistamiseen.


Kuvassa on ensimmäinen versio käsikonsolista, jonka päätin rakentaa. (Kuvat on otettu vuonna 2017)  Oma suosikki on tasohyppelypeli nimeltä Mushroom. Siinä kirjaimellisesti hypitään sienellä piikkien yli ja kerätään kolikoita. Pelissä oli myös erittäin hieno "dokumentoimaton ominaisuus": kun pelaaja pääsi tasolle, jota ei ollut luotu, tuli kentäksi ihan mitä sattuu. Tämä johtui siitä, että koodi luki jo seuraavaa kohtaa RAM-muistista, joka ei ollut varattuna kentille.

Nyt kun kävin verestämässä muistoja, huomasin että olin ehtinyt koodata siihen jo melko liudan pelejä. Tässä on lista kaikista peleistä:

- Avaruuspeli (kaksi pelaajaa ajaa joillakin avaruusaluksilla ja yrittävät ampua toisensa)
- Pong
- Space Invaders
- Joku ammuntapeli, jossa kaksi pelaajaa saa 10 ammusta ja yrittävät saada toisensa ammuttua.
- Mushroom (pelaaja yrittää läpäistä tason hyppimällä piikkien yli)

Muutamasta pelistä löytyy myös video. Ne on kuvattu todella huonolla laadulla, mutta lataan ne kuitenkin jonnekin katseltavaksi. Harmi vain että ne ovat kaikki kuvattu vanhoista versioista. Pitänee rakentaa tuo käsikonsoli uusiksi jos on aikaa.

Käsikonsolin prosessorina toimii siis ATmega328P. Näyttö on SSD1306 ohjaimella varustettu 0,96" monokromaattinen I2C-OLED.


Pävitys 20/11/2018

Rakensin tuon vanhemman käsikonsolin uudelleen. ATmega328P tuntuu olevan melko hidas pelaamiseen.

Koodi vaatii vielä pientä  hiomista, sillä aikaisemmassa konsolissa oli huomattavasti enemmän nappeja. Piirtorutiineja ja fysiikoita pitäisi myös päivittää mushroom-pelissä.


Päivitys 26.12.2018

Yritän saada mushroom-pelistä piirtomoottorin kirjastoksi, jotta voisin käyttää sitä useammassa projektissa. Olisi kyllä hienoa jos onnistuisin siinä. Tämänhetkinen tilanne kehityksessä tuntuu kyllä siltä etten saa sitä ikinä valmiiksi.