segunda-feira, 7 de março de 2011

Super NES - Arduino Gamepad - p.1

Quem já se divertiu com um Super Nintendo levanta a mão: \o
Quem se diverte com um Arduino levanta a mão: o/
Quem quer juntar tudo e usar o Gamepad do SNES com o Arduino continua lendo o post aqui!


O Software

Já existe um projeto para adaptar o controle do NES para o Arduino - chama-se NESpad: https://code.google.com/p/nespad/
Na página,  temos a opção de baixar a versão 1.3, mas ela não vem com o código para o SNES - vamos ter que baixar a versão diretamente do SVN:

svn checkout http://nespad.googlecode.com/svn/trunk/ nespad

Para instalar, basta copiar para a pasta "libraries" da instalação do arduino. Copie os diretórios NESPad e SNESPad, não a pasta nespad criada ao baixar o código (no Debian e no Ubuntu, o diretório é /usr/share/arduino/libraries).

Agora, ao abrir a IDE do Arduino, temos mais 2 opções no menu Sketch, Import Library...: NESPad e SNESPad.



O Hardware

De material, vamos precisar de uns cabos (jump wires), um SNES Pad e o Arduino. Eu recomendo o uso de uma protoboard - perdi algumas horas até perceber que o problema não era no código, mas em um "mal contato"... =/

A ligação entre o gamepad e o arduino segue o mesmo que está no projeto original:
Pode-se seguir as cores (se vc for como eu e já desmountou o gamepad) ou a posição, já que o plug é dividido em 4 e 3 contatos (o GND é o pino do canto arredondado).

No arduino, conecta-se assim:

SNES pin Arduino Pin
STROBE/LATCH Digital 2
CLOCK Digital 3
DATA Digital 4
+5V +5V
GND GND

Testando

Vamos criar um código só pra ver se está tudo OK com a comunicação:

#include <SNESpad.h>

// SNESPad(<pin STROBE>, <pin CLOCK>, <pin DATA>)
SNESpad nintendo = SNESpad(2, 3, 4);

int state = 0;

void setup() {
  Serial.begin(57600);  
}

void loop() {
  // read button state
  state = nintendo.buttons();
  // write binary button state
  Serial.println(state, BIN);

  delay(50);
}

Ligue seu arduino, faça upload e abra o Serial Monitor. Ajuste o baud rate (é a última caixa, no Serial Monitor) para 57600. Pressione alguma teclas e observe a saída:


Se apenas algumas teclas funcionarem, verifique os cabos ligados ao gamepad.

No próximo post, pretendo mostrar como ligar um segundo gamepad, usar constantes da LIB para ligar leds ou um código pra usar o arduino com o snes-9x. Até a próxima!