Daha önce evreno'nun aşağıdaki başlığını bu konu için işgal etmiştim,
http://www.commodore.gen.tr/forum/index.php?topic=10323.90Artık ayrı bir başlığa taşıma vakti geldi.
Temel olarak aşağıdaki projeleri örnek aldım.
http://www.imaginaryindustries.com/blog/?p=80http://sweetlilmre.blogspot.com.tr/2015/01/arduino-pro-micro-arcade-controller.htmlİlk projenin donanım bağlama gibi bir derdi olmamış çok özellikli bir joystick'i bilgisayara entegre etmiş sadece. İkincisi ise doğrudan arcade sistemler için yapılmış. Bir adet Arduino pro micro'da iki oyuncu için yeterli i/o pin bulunmadığı için bu işi iki tane Arduino pro micro kullanarak tamamlamış.
Benim yaptığımın farkı ise input i/o pin kısıtlamalarını parallel to serial shift register (74hc165) kullanarak aşmak şeklinde. 2 digital i/o pin ortak bir şekilde tüm shift register'ların LATCH ve CLOCK pin'lerine gidiyor. Her bir shift register'ın çıktısı da ayrı i/o pin'lerden arduino'ya besleniyor. Bu şekilde LATCH ve CLOCK için kullandığımız i/o pin'lerinin source edebileceği akımın yettiği kadar shift register bağlayıp input sayısını ciddi bir şekilde arttırmak mümkün.
Arduino tarafında shift register'larını okumak için kullandığımız ana döngüyü de 8 defa döndürmek yetiyor.
Yaptığım denemede 3 adet shift register ile 24 input'u rahatlıkla halletti. 1 adet shift register daha ekleyip 32, dahasını ekleyip 40-48 vesaire arttırmak mümkün. 32'ye kadar olan input'lar buton şeklinde. 32'den sonrası joystick'in butonlar dışındaki diğer kontrollerine aktarmak lazım.
Emülatörlerde yaptığım denemelerde butonların yön tuşlarına verilmesinde bir sıkıntı bulunmuyor.
Tek bir shift register için şema şu şekilde.

Şemada Pro micro I/O 1 diye verdiğim pin arduino sketch'i içinde D10'a bağlı olması gerekiyor. Diğerleri de bununla aynı olacak ve onlar da D7 ve D8'e bağlanacaklar. Pin'lerin seçiminde özel bir durum yok sadece ben geliştirme sırasında bir ara bendeki pro micro'dan kıllandığım için değiştirme ihtiyacı hissettiğim için öyleler.
Verdiğim sketch'i derleyebilmeniz için aşağıdaki klasördeki USBAPI.h ve HID.cpp dosyalarını JoystickHID.zip içindekilerle değiştirmeniz gerekiyor. (Verdiğim dosyalar Arduino IDE 1.6.3 için, farklı bir versiyondaysanız ya dosyaları değiştirmek yerine yamamanız ya da 1.6.3 yükleyip onunla verdiğim dosyaları kullanarak yapmanız lazım)
Arduino\hardware\arduino\avr\cores\arduino
Son olarak,
Tek shift register ile tek joystick ve Mario
Bu da 24 input sağlayan versiyonun benim kabine bağlı görüntüsü.

Bundan sonraki ilk iş 8 input sağlayan üstteki şemayı eagle'da çizip 4'lü panel halinde pcb'lerini üretmek.