Składałem ostatnio Atari w wersji mini ITX według projektu użytkownika x_angel i przy tej okazji naszła mnie myśl, aby podłączyć do niego klawiaturę USB. Takie klawiatury są obecnie dużo bardziej popularne niż te w standardzie PS2, dodatkowo obudowa w której umieściłem Atarynkę ma przewidziany otwór na port USB i nie chciałbym zostawić go pustego.
Bawiłem się wcześniej Arduinami i różnymi płytkami rozszerzającymi, w tym hostem USB. Eksperymentalnie podłączałem różne myszki, pady (załącznik), klawiatury MIDI i sprawdzałem, czy zadziałają. Reakcją na wciśnięcia przycisków było co prawda wypisywanie różnych debugowych komunikatów na serial port, ale dzięki temu przetarłem szlaki i myślę, że zdołam zaprogramować interfejs klawiatury USB dla małego Atari. Takie urządzenie, jeśli faktycznie powstanie, przyda się pewnie tylko mi, gdyż będzie zbudowane z myślą o obudowie, jaką wybrałem, a wepnę się w miejsce PICa obsługującego AKI na płycie mini ITX, którego w standardowym Atari nie ma...
W międzyczasie jednak zaświtał mi inny pomysł. Oprócz klawiatury mogę obsłużyć joypad w standardzie HID. Nie ukrywam, że Atari zbudowałem głównie dla gier. Chciałbym obsłużyć klawisze "Start", "Select" i "Option" z pada i 90% gier zdołałbym uruchomić i obsłużyć w ogóle bez udziału klawiatury. Atari byłoby wtedy bardziej "konsolą" niż "komputerem". Jednak i to urządzenie łatwo mi będzie zainstalować w Atari mini ITX, a niekoniecznie w standardowym.
I tu pojawił się trzeci pomysł: interfejs do padów wpinany w port joysticka (db9). Takie urządzenie mogłoby być całkowicie zewnętrzne.
Zbudowałem prototyp. Ostatnio leżą mi pady od PlayStation 4 i w pierwszej wersji softu na Arduino obsłużyłem właśnie tego typu pad. "Obsłużyłem" jest trochę na wyrost, całą robotę odwalili za mnie twórcy biblioteki USB Host Shield: https://github.com/felis/USB_Host_Shield_2.0
Prototyp zadziałał właściwie. Kod pierwszej wersji umieściłem tutaj: https://github.com/vandalton/DaltonAJKI
Grałem w River Raid, Boulder Dash, Syn Boga Wiatru, Montezuma's Revenge... I grało się zaskakująco dobrze :) Jako kierunków można używać zarówno krzyżaka, jak i lewego joysticka. Tym lewym joystickiem z pada PS4 bardzo łatwo ruszyć równocześnie w górę i prawo/lewo, nie było więc konieczności programowania "skoków w bok" znanych z rozwiązania (S)NESctrl kolegi Mq. Choć dla innych padów pewnie takie funkcje będą potrzebne.
USB Host Shield istnieje w dwóch wersjach. "Dużej", przeznaczonej do współpracy z Arduino Uno, Mega itp. i "małej", dla Arduino Pro Mini. "Mała" wersja działa na 3.3V, a "duża" na 5V. Do szybkiego prototypowania użyłem wersji "dużej", jednak chciałbym, aby docelowy interfejs joysticka był możliwie mały. Wiąże się to jednak z problem. Standard USB to 5V i nie wszystkie urządzenia współpracują z "małą" wersją Host Shielda. Pady z załącznika działają. Klawiatura działa, ale np. pad od PlayStation 4 działa tylko z wersją "dużą".
Poza tym problemem widzę wiele zalet USB. Wraz z rozwojem projektu można:
1) podłączyć hub i obsłużyć pad i klawiaturę jednocześnie, albo 2 pady i klawiaturę
2) podłączyć "pestkę" bluetooth i obsłużyć pady/klawiatury bezprzewodowe
Są i wady w porównaniu do AKI, a w zasadzie jedna... Cena. USB Host Shield jest sam w sobie dość drogi, pewnie ze 3 AKI dałoby się zbudować za te same pieniądze, a Arduino w ogóle pominąłem w tych obliczeniach.
Pytanie: czy w ogóle jesteście zainteresowani tego typu projektem? Jeśli tak, jakie funkcje byłyby dla Was najważniejsze? Jakie urządzenia warto obsłużyć w pierwszej kolejności?