#majsterkowanie #arduino

Jak wygląda opcja zrobienia klawiatury w oparciu o mikrokontroler arduino? Największy problem jaki widzę to ilość pinów które ma arduino, względem tego ile potrzebują klasyczne rozwiązania, i jestem ciekawy jak wygląda kwestia antighostingu.


Mam w planach zrobić specyficzny kontroler do gier który będzie potrzebował wiele przycisków, i myśle o tym jak typowe klawiatury komputerowe używają jedynie 2 pinów z USB do przesyłania informacji o wciśniętych przyciskach, mając przy tym pełny antighosting

Komentarze (6)

@dradrian_zwierachs nie mam na myśli pełnej klawiatury, ale przyciski od chodzenia, sprintu, kucania, zmiany broni...


Tego na pewno będzie więcej niż pinów arduino, nawet gdybym to zrobił na zasadzie multiplexera (ale wtedy nie ma mowy o antighostingu. Poruszania się ze sprintem i skokiem na tym nie zrobie żeby przyciski nie zakłócały sobie wzajemnie pracy)

@redve no ogarniam. Choć trzeba by było wyobrazić sobię kształty kontrolera, a potem użyć płytki klawiatury i tej folii co kable idą. Jakoś rozpracować schemat, a jednocześnie zmniejszyć folię ze ścieżkami. Potem tylko mostek do guzika, gałki. A na klawiaturze to się we dwójkę na splitscreenach grywało. Parę na raz można dusić.

Z tego co pamiętam, klasyczne rozwiązania opierają się na "matrycach" Gdzie rząd jest zrobiony na przerwaniach (hardware interrupts) i np. Rzad klawiszy Q-P jest na jednym, A-L na innym. Czyli robi się tak ze Q jest pociagniete jednoczesnie do PD0 i PD4 (patrzylem na szybko na pinout arduino micro) klawisz W do PD0 i PC6 itd..

Dzieki przerwaniom masz natychmiastową informacje o tym ze coś zostalo wcisniete, nastepnie sprawdzasz ktora konkretna litera zostala wcisnieta, czytając rejestr.

Debouncing jest czesto realizowany filtrami RC (rezystor kondesantor) dzieki czemu unika się tzw. drgania stykow, ktore mogą sie przytrafić przy wciśnięciu.

No i teraz, najwieksza zabawa czyli jak już poprawnie skomponujesz po stronie mikrokontrolera co zostało wcisnięte nalezy wyslać odpowiednią ramkę deskryptora USB. Pamietam ze mozna znaleźć w necie gotowce które symulują gamepada/joystick. Wtedy jedyne co musisz zrobić to zmapować swoje przyciski na wysyłane dane.

Z USB to mniej więcej tak robiłem z 10 lat temu, jak zrobiłem na STM32 bieda wersję DIY gitary do guitar hero :D

Protokół USB (2.0) jest zbudowany w oparciu o sygnały różnicowe stąd są 2 kable D+ i D- i lecą tam setki megaherców. W nowych wersjach np USBC tych kabli rożnicowych jest wiecej (chyba 4). Całe szczęście nowa wersja USB jest kompatybilna z tą starą.
Żeby postawić coś takiego na arduino sprawdź sobei czy jest jakiś gotowy stos pod to bo pisanie samemu stosu od 0 to jest katorga.
Następnie (nie wiem jak to wygląda w kwestii klawiatur i padów bo pisałem tylko customowe sterowniki) musisz dodać swoje urządzenie do VID/PID w systemie. Na linuxie jest to łatwiejsze niż w innych systemach. Ale dla klawiatur i innych urządzeń HID chyba nie jest to potrzebne.

Zaloguj się aby komentować