Salve, ho finito in questi giorni il prototipo del mio nuovo gamepad..
La mia intenzione era utilizzare il controller del super nintendo su qualsiasi pc, magari con la comodità della comunicazione bluetooth.
Ho trovato alcuni progetti in rete riguardanti l'utilizzo del controller che si sono rilevati molto utili..
Tuttavia nessuno di questi progetti faceva affidamento al riconoscimento della periferica tramite bluetooth HID e si affidavano ad eventuali driver/applicazioni sul sistema host per interpretare i segnali mandati dal gamepad.
Cercherò di evidenziare brevemente solo la parte riguardante l'utilizzo del modulo bluetooth HID, la parte che a me ha fatto più sudare, visto che il resto del progetto é praticamente identico a tutti gli altri.
Devo ancora sistemare tutto ciò che riguarda l'alimentazione ed un'eventuale batteria.
Materiali Utilizzati:
-Arduino Pro mini 3.3V
-BlueSMiRF HID
-un controller snes (super nintendo entertainment system) croce direzionale + 8 pulsanti
Link utili:
Video spiegazione funzionamento controller snes:http://www.instructables.com/id/Bluetooth-SNES-Controller-for-Android/
Altro progetto simile con anche foto utili per l'assemblaggiohttp://forum.xda-developers.com/showthread.php?t=1146205
tutorial bluesmirf hid: HOW TO GET WHAT YOU WANT
Parte "più complessa del progetto":
Per far riconoscere la vostra periferica come controller HID, va impostato il modulo bluetooth tramite ovviamente seriale. I parametri importanti, oltre la velocità comunicazione del'interfaccia seriale sono le flags hid del dispositivo.
Da terminale seriale collegato al modulo bluetooth:
$$$ //si entra in CMD mode
CMD //risposta
SN,snesGP //imposta il nome device
S~,6 //imposta il profilo HID se non fosse già impostato
SM,6 //imposta la riconnessione automatica ad un eventuale riavvio
SH,0010 //dichiaro la periferica un gamepad
SU, //imposta il baudrate della seriale, da concordare rispetto i dati che invia arduino.
--- //esce dal CMD mode
Tutte le modifiche vengono applicate alla successiva avvensione del modulo.
Una volta applicate le HID flags a 0010, il modulo si aspetta di ricevere un input composto in 8 BYTE, io personalmente nn ho trvato modo di cambiare la struttura del frame.
la struttura é la seguente
BYTE 0 = 0xFD (il preambolo che identifica un raw input)
BYTE 1 = 6
BYTE 2 = Asse0
BYTE 3 = Asse1
BYTE 4 = Asse2
BYTE 5 = Asse3
BYTE 6 = Btns0
BYTE 7 = Btns1
ogni Asse rapptesenta l'asse con un intero da 127 a -127 in complemento a 2
ogni Btns rappresenta 8 pulsanti, 1 se premuto, 0 altrimenti
Sostanzialmente ho codificato la croce direzionale del snes su 2 assi e i bottoni in un unico byte.
Arduino non deve far altro che spedire 8byte tramite seriale al modulo, che inoltrerà i dati tramite comunicazione bluetooth.
A breve posterò eventuale codice, foto e spiegazioni un po' meno frettolose.