Jogar num equipamento Android com um controlador SNES
Antes de avançar para o tutorial, pergunto e respondo a uma questão. Sabem do que se trata o Andoid? O Android é um sistema operativo open-source, desenvolvido pela Google para telemóveis. E como todos sabemos um dispositivo táctil não é o mais indicado para jogar, então foi daí que nasceu a ideia de utilizar um controlador (comando) externo para aumentar a experiência de jogo. E porquê um SNES? Porque é pino a pino compatível com o Arduino, ou seja, não necessita de conversor.

Toda a electrónica deste projecto é composta por: um Arduino Pro Mini e um modulo bluetooth BlueSMiRF Gold para comunicar com o telemóvel de uma forma livre de fios. Ao se usar um Arduino, este corre um programa que emula os dados vindos do comando e envia-os para o telemóvel via Bluetooth, o telemóvel ao receber considera-os como atalhos de teclado.
Para começares a alterar o teu comando SNES tens de compreender os pinos da fixa e o seu funcionamento, por exemplo ao clicar no botão B o controlador irá enviar o Byte 0111111111111111 ou o botão Y o Byte 1011111111111111 e se estes dois botões forem pressionados ao mesmo tempo será enviado o Byte 0011111111111111.

Seguimos para a montagem do Hardware, a primeira coisa a fazer é configurar o módulo de Bluetooth para isso vamos emparelhá-lo com o pc e usar um software para o configurar como o Zterm por exemplo. Tem atenção que para que isto funcione tens de alimentar o módulo, ou seja os pinos VCC e GND tem de estar correctamente conectados. Assim que o computador pedir o código de acesso só terás de colocar ’1234′.
Agora que estás na configuração do módulo tens de realizar algumas alterações, primeira é mudar o nome por exemplo SNES, segundo alteras a Baud Rate para 115200.

Está na altura de ligar tudo, o módulo bluetooth: Ligar o TX ao TX do Arduino e o RX ao RX do Arduino e o CTS ao RTS (só tens de colocar um fio entre estes dois pinos). O controlador SNES: o pino SNES Latch Line ao pino 2 do Arduino, o SNES Clock Line ao pino 3 e o SNES Data Line ao pino 4. Depois é só ligar o VCC e o GND respectivamente.
Por última basta-te fazer Download da biblioteca MeetAndroid e realizar o upload do seguinte código:
// SNES controller code for Arduino Pro Mini 328 (3.3V) // Author: Rich Degenhardt #include MeetAndroid meetAndroid; int latch = 2; // set the latch pin int clock = 3; // set the clock pin int data = 4; // set the data pin int controllerData[16]; // array to store data from 16 clock cycles /* SETUP */ void setup() { // set baud rate to 57.6k Serial.begin(57600); // set output/input pins pinMode(latch,OUTPUT); pinMode(clock,OUTPUT); pinMode(data,INPUT); // set latch and clock high digitalWrite(latch,HIGH); digitalWrite(clock,HIGH); } /* THIS READS DATA FROM THE CONTROLLER */ void controllerRead() { // set latch and clock low digitalWrite(latch,LOW); digitalWrite(clock,LOW); // set latch high to trigger controller data send digitalWrite(latch,HIGH); delayMicroseconds(12); digitalWrite(latch,LOW); delayMicroseconds(6); // Clock Cycle 1 controllerData[0] = digitalRead(data); // Clock Cycles 2-16 for (int i = 1; i <= 15; i++) { digitalWrite(clock,HIGH); delayMicroseconds(6); digitalWrite(clock,LOW); delayMicroseconds(6); controllerData[i] = digitalRead(data); } } // Button Reference // 01111111 11111111 - B // 10111111 11111111 - Y // 11011111 11111111 - Select // 11101111 11111111 - Start // 11110111 11111111 - Up // 11111011 11111111 - Down // 11111101 11111111 - Left // 11111110 11111111 - Right // 11111111 01111111 - A // 11111111 10111111 - X // 11111111 11011111 - L // 11111111 11101111 - R /* MAIN LOOP */ void loop() { controllerRead(); String Out = ""; int length = 1; // B if (controllerData[0] == 0) { if (Out != "") { Out = Out + ","; length = length + 1; } Out = Out + "J"; length = length + 1; } // Y if (controllerData[1] == 0) { if (Out != "") { Out = Out + ","; length = length + 1; } Out = Out + "U"; length = length + 1; } // SELECT if (controllerData[2] == 0) { if (Out != "") { Out = Out + ","; length = length + 1; } Out = Out + "2"; length = length + 1; } // START if (controllerData[3] == 0) { if (Out != "") { Out = Out + ","; length = length + 1; } Out = Out + "1"; length = length + 1; } // UP+RIGHT if (controllerData[4] == 0 && controllerData[7] == 0) { if (Out != "") { Out = Out + ","; length = length + 1; } Out = Out + "E"; length = length + 1; } // UP+LEFT else if (controllerData[4] == 0 && controllerData[6] == 0) { if (Out != "") { Out = Out + ","; length = length + 1; } Out = Out + "Q"; length = length + 1; } // DOWN+RIGHT else if (controllerData[5] == 0 && controllerData[7] == 0) { if (Out != "") { Out = Out + ","; length = length + 1; } Out = Out + "C"; length = length + 1; } // DOWN+LEFT else if (controllerData[5] == 0 && controllerData[6] == 0) { if (Out != "") { Out = Out + ","; length = length + 1; } Out = Out + "Z"; length = length + 1; } // UP else if (controllerData[4] == 0) { if (Out != "") { Out = Out + ","; length = length + 1; } Out = Out + "W"; length = length + 1; } // DOWN else if (controllerData[5] == 0) { if (Out != "") { Out = Out + ","; length = length + 1; } Out = Out + "S"; length = length + 1; } // RIGHT else if (controllerData[7] == 0) { if (Out != "") { Out = Out + ","; length = length + 1; } Out = Out + "D"; length = length + 1; } // LEFT else if (controllerData[6] == 0) { if (Out != "") { Out = Out + ","; length = length + 1; } Out = Out + "A"; length = length + 1; } // A if (controllerData[8] == 0) { if (Out != "") { Out = Out + ","; length = length + 1; } Out = Out + "K"; length = length + 1; } // X if (controllerData[9] == 0) { if (Out != "") { Out = Out + ","; length = length + 1; } Out = Out + "I"; length = length + 1; } // L if (controllerData[10] == 0) { if (Out != "") { Out = Out + ","; length = length + 1; } Out = Out + "L"; length = length + 1; } // R if (controllerData[11] == 0) { if (Out != "") { Out = Out + ","; length = length + 1; } Out = Out + "R"; length = length + 1; } char outData[length]; Out.toCharArray(outData, length); meetAndroid.send(outData); delay(16); }



Es o maior… pelo menos melhor do k eu