Предисловие Недавно я обнаружил два давно забытых старых геймпада от SMD, сама консоль давно потерялась и геймпады все это время пылились без использования, но они работают и как-то не могу заставить себя выкинуть " живые» устройства.
Я решил подключить их к компьютеру, хоть какая-то польза от них есть, а в качестве адаптера мы используем Arduino Leonardo.
Протокол SMD геймпада
В простейшем случае получение данных выглядит так:
ПРИКОЛОТЬ | Направление | Выберите=НИЗКИЙ | Выберите = ВЫСОКИЙ |
---|---|---|---|
1 | В | ВВЕРХ.
|
ВВЕРХ.
|
2 | В | ВНИЗ | ВНИЗ |
3 | В | ВЫСОКИЙ | ЛЕВЫЙ |
4 | В | ВЫСОКИЙ | ВЕРНО |
5 | ВНЕ | 5 В | 5 В |
6 | В | А | Б |
7 | ВНЕ | Выбирать | Выбирать |
8 | ВНЕ | Земля | Земля |
9 | В | Начинать | С |
Получить их немного сложно: нужно сделать 2 изменения.
Выбрать LOW-> HIGH с интервалом 1,1-1,2 миллисекунды, после чего выводы 1,2,3,4 становятся LOW, и еще одним изменением выбрать LOW-> HIGH Z. На них появляются значения Y,X,Mode соответственно.
Выбирать | ПИН-код 1 | ПИН-код 2 | ПИН-код 3 | ПИН-код 4 |
---|---|---|---|---|
НИЗКИЙ | ВВЕРХ.
|
ВНИЗ | НИЗКИЙ | НИЗКИЙ |
ВЫСОКИЙ | ВВЕРХ.
|
ВНИЗ | ЛЕВЫЙ | ВЕРНО |
НИЗКИЙ | ВВЕРХ.
|
ВНИЗ | НИЗКИЙ | НИЗКИЙ |
ВЫСОКИЙ | ВВЕРХ.
|
ВНИЗ | ЛЕВЫЙ | ВЕРНО |
НИЗКИЙ | НИЗКИЙ | НИЗКИЙ | НИЗКИЙ | НИЗКИЙ |
ВЫСОКИЙ | З | Да | Икс | РЕЖИМ |
НИЗКИЙ | ВЫСОКИЙ | ВЫСОКИЙ | ВЫСОКИЙ | ВЫСОКИЙ |
ВЫСОКИЙ | ВВЕРХ.
|
ВНИЗ | ЛЕВЫЙ | ВЕРНО |
НИЗКИЙ | ВВЕРХ.
|
ВНИЗ | НИЗКИЙ | НИЗКИЙ |
Библиотека
Для удобства я написал простую библиотеку для работы с геймпадом.SMDjoystick.h
Теги: #arduino leonardo #sega megadrive #usb hid #Разработка для Arduino#ifndef _SMDJOYSTICK_H_ #define _SMDJOYSTICK_H_ #include <Arduino.h> /** SegaMegaDrive gamepad arduino library by AsGreyWolf **/ enum{
Вместе с данным постом часто просматривают:
-
Все О Sony Vaio Vpc Серии Y216Fx/B
19 Oct, 24 -
Текущая Картина Образования
19 Oct, 24