Jogando Super Nintendo no Android com controle original
Logo que comprei meu HTC Desire HD (sistema operacional Android) instalei um emulador de Super Nintendo (SNES), este foi um dos poucos videogames que tive, e era viciado (quando tinha 10 / 11 anos) em Super Mario World, assim que instalei o Mario me veio aquela nostalgia! Mas jogar com o controle touch screen é péssimo, não tem experiência tátil e o seu dedo fica encima do jogo.
Então pensei, é claro que alguém já ligou o controle original no celular, e estava certo, encontrei este vídeo: “http://www.youtube.com/watch?v=_FZTz2KO9vU“. Mas tem um detalhe muito importante este projeto, é para NES e não o SNES (mais novo), ou seja, sabia que era possível fazer e tinha os materiais para isto, então só esperei sobrar um tempo para fazer (o único componente que não tinha era o controle, mas consegui um paralelo por R$ 8,00 no Mercado Livre).
vimeo.com/bsoares/snes-on-android-with-controller-and-bluesmirf
Como funciona:
O controle do SNES esta ligado a Arduino, é bem fácil obter as teclas pressionadas, mas existe uma biblioteca para tornar esta tarefa ainda mais simples (NESpad/SNESpad). Cada tecla pressionada liga um bit dentro do número que representa o estado das teclas do controle, e este estado (número) é enviado via Bluetooth (uso o BlueSMiRF) para o Android.
No Android, quem recebe este número é o Amarino, mas ele apenas recebe o número, ainda é necessário um App (que foi modificado a partir deste exemplo “SoftKeyboard“) para converter este número em teclas pressionadas (uso Bitwise) como um teclado do Android.
Por fim é só configurar o emulador para entender as teclas pressionadas como os comandos dentro do mesmo (pular, andar, girar, etc…)
Desta forma o controle pode ser usado como o teclado do seu Android, e ainda ser configurado como o controle de outros emuladores.
Sobre o módulo bluetooth BlueSMiRF:
Depois de configurado ele será o seu “cabo USB virtual” pois da mesma forma que usamos o comando Serial.print(“…”) para enviar dados via porta serial, o mesmo dado será enviado via bluetooth.
A App Amarino utiliza 57.600 de baudrate, e os módulos BlueSMiRF normalmente vem com 9.600.
Para configurar o blueSMiRF utilizei alguns tutoriais:
- http://todbot.com/blog/2006/02/23/howto-mac-os-x-bluetooth-serial-port/
- http://www.sparkfun.com/tutorials/67
Sobre o Soft Keyboard (App para Android):
Modifiquei o exemplo de Keyboard App disponível no Android Developers para obter os dados via Amarino e agir como teclado. Me baseei neste projeto criado para NES, porém criei outro código para a Arduino e alterei 95% do código para o Android.
O código fonte do projeto para Androi, Arduino e as versões das bibliotecas que foram utilizadas, podem ser baixadas do meu Github:
https://github.com/BSoares/SNES-on-Android-with-original-controller
Conteúdo Relacionado:
Código fonte
Arduino UNO
BlueSMiRF
Amarino
Android Sample Soft Keyboard
NESpad/SNESpad
Vídeo no Youtube
Enjoy :-)
Posts relacionados:
Olá Bruno! Que bacana sua invenção cara!! Parabéns!! Já pensou em comercializar num kit, pois acredito que em breve o Android será uma boa plataforma de jogos!
Sua invenção já é uma notícia internacional!!! Parabéns novamente!!!
Irei postar no meu blog!
Abraço!
:-) vlw, parece que esta se espalhando bem rápido!
Só não posso dizer é que uma invenção minha, pois quando comecei a fazer já tinha um projeto para o NES, que é bem parecido.
Vlw!
Pô Brunão, mandou super bem no projeto hein! Parabéns cara e sucesso na vida. ;)
Valeu Fabão!
Muito bom cara parabens pelo desenvolvimento ae ficou muito bom mesmo !
Valeu e obrigado pelo post no seu blog!
Opaa cara que isso não fiz mais que obrigação, mais uma vez parabéns ae
Parabéns, Cara! Vi seu post no hackaday e realmente é muito interessante. Também sou hobbysta e gosto de ficar fuçando nas coisas. Também não gosto de ficar fazendo propaganda, não acho que esse seja o ponto… Mas devo te dizer que uma das minhas maiores motivações pra um projeto meu foi justamente o Super Mario World! Hahaha, sério! Se tiver curiosidade, o link do blog desse projeto é http://PSPEWC.blogspot.com. É basicamente um par cliente-servidor pra usar o PSP como joystick sem fio em Windows e agora Unix também.
Também tenho um android e depois de ver seu projeto comecei a pensar em um jeito de usar o PSP como joystick pra ele. Já cheguei a instalar o SDK há algum tempo, mas não me aprofundei muito. Dei uma olhada na documentação e acho que dá pra simular eventos de teclado no android sim. Quem sabe daqui algum tempo…
Parabéns de novo!
Obrigado Raphael! O post no hackaday me rendeu muitas visitas!
Seu projeto é sensacional!
Vlw!
Muito bom o projeto cara, tá de parabéns. Agora só precisa atualizar o blog com mais frequencia.
My spouse and I stumbled over here different page and thought I might as well check things out. I like what I see so now i’m following you. Look forward to checking out your web page for a second time.