Подключаем джойстики от Dendy к PC через Arduino. Как подключить старую приставку к новому монитору (например, Dendy, Sega, Sony PS) Как подключить джойстик от "Денди" к компьютеру через LPT-порт

Нынешнюю молодежь уже мало чем удивишь в сфере компьютерных игр. Они уже давно не заморачиваются вопросом о том, как подключить «Денди» к телевизору, а играют на супермощных компьютерах. Самая реалистичная графика, правдоподобные персонажи, невероятные музыкальные сопровождения — все это вполне привычно для современного геймера. Но еще каких-то пару десятков лет назад всего этого не было, но было кое-что, что покорило сердца миллионов людей — одна из первых консолей — приставка «Денди».

Немного из истории «Денди»: игра нашего детства

Рожденные до девяностых годов наверняка помнят ажиотаж вокруг невероятно "крутой" приставки с логотипом слоненка на панели, которая появилась в начале 90-х годов. Тогда игра стоила невероятных денег для советского гражданина, но это не помешало разработчикам заработать на данном рынке миллионы.

На самом деле «Денди» первая на отечественном рынке, но не первая в производстве. Компания Nintendo до этого успела выпустить десятки других версий консолей, но только «Денди» смогла покорить сердца отечественных геймеров. На то время в России было 4 дилера от компании «Степлер», которые осуществляли поставку. К сожалению, данная компания свернула свою деятельность уже к 94-му году.

Конечно, даже сейчас можно найти давно всеми забытый «Денди» на прилавках некоторых магазинов и на специализированных сайтах, но все они далеки от оригинала, и являются не чем иным, как подделкой из Китая.

Картриджи и самые популярные игры на «Денди»

Приставка и джойстики сами по себе не представляли интереса без специальных картриджей, именно они являлись носителями основной информации. На одном таком картридже могла быть как одна игра, так и 999! Но наиболее ценными считались те, в которых имелось от 3 до 10 различных игр. Молодежь постоянно менялись, покупали и продавали друг другу картриджи. Даже в наше время можно встретить людей, у которых остались целые коллекции оригинальных и редких игр.

Именно благодаря огромному ассортименту качественных и интересных игр, которые были выпущены для операционной системы Nes, данная консоль стала так востребована среди российских любителей игр. Такие бессмертные творения, как «Мортал Комбат», «Пакман», «Супер Марио», «Танки», «Остров приключений» и многие другие навсегда останутся в памяти людей, переживших культ девяностых.

Как подключить «Денди» к телевизору?

Именно таким вопросом задавались многие счастливые покупатели приставки того времени. На самом деле ничего сложного в этом не было, достаточно было подсоединить a/v штекеры приставки и телевизора, а затем начать поиск канала — все просто!

Но дело в том, что в те времена и телевизоры были простыми, то есть имели соответствующие разъемы, но как подключить «Денди» к телевизору современной модели, которая поддерживает HDMI?

Если вы не нашли на своем телевизоре аудио/видео выход, возможно, найдете выход SCART, по сути, это то же самое, что и A/V. В данном случае вам придется купить переходник или непосредственно сам кабель SCART, он представляет из себя широкий разъем с одной стороны, и «тюльпанчики» — с другой. Благодаря такому кабелю можно решить вопрос, как подключить «Денди» к телевизору.

Как подключить приставку «Денди» к телевизору новейшего поколения?

К сожалению, в последнее время производители все чаще стали выпускать телевизоры, не имеющие разъемов для компонентных подключений, ввиду того что современные приемники имеют интерфейс высокого разрешения.

Допустим, вы решили окунуться в прошлое и поиграть в ретро-игры. Для этой цели была куплена приставка, но позже выяснилось, что на вашем телевизоре нет A/V и SCART-выходов. Что делать? Как подключить «Денди» к телевизору Samsung, на котором не оказалось необходимых разъемов (впрочем, это касается любой марки).

Выйти из такой ситуации непросто, но возможно. Придется приобрести специальное устройство — конвертер A/V в HDMI. Такие конвертеры продаются в интернет-магазинах и на популярных китайских площадках.

Итак, перед тем как подключить «Денди» к телевизору LG, убедитесь, что приставка выключена и отсоединена от питания. Далее, при помощи кабеля с «тюльпанчиками» подсоедините приставку к конвертеру. С другой стороны, конвертер подключается к телевизору при помощи HDMI-кабеля. Осталось только вставить в приставку картридж с любимой игрой, подключить к сети и включить игру. Возможно, понадобится поиск каналов, чтобы выйти на необходимую волну.

Знакомы все дети 90-х. Ворвавшись на отечественные рынки, консоль быстро обрела популярность, и вот уже в каждом доме дети всех возрастов собирались для увлекательной игры. Затем, когда компьютеры стали настолько доступны, что купить их мог каждый, век "Денди" постепенно завершился. К тому же среди приставок стали появляться и более продвинутые аналоги, наподобие Sega, Sony PlayStation и Nintendo 64.

Однако тяга поиграть в игрушки 90-х не утихает до сих пор. Теперь не нужно гоняться за картриджами по всем знакомым и друзьям. Достаточно провести несколько нехитрых манипуляций, и возможность поиграть в "Денди" появится и на персональном компьютере.

Что такое "Денди"

"Денди" представляет собой приставку с одним или двумя джойстиками. Носителями игр служили специальные картриджи. Это микросхема, облачённая в пластиковый корпус, которая носила в себе записанную игру. В эпоху недостаточного интернета для того, чтобы поиграть во что-то новое, был актуален обмен картриджами с соседями или друзьями.

Подключалась приставка посредством кабелей прямо к телевизору. А сама игра велась с помощью одного или двух джойстиков, оснащённых кнопками.

Немного истории

Самой первой перенести игры из автоматов на экраны домашних телевизоров догадалась японская компания Nintendo в 1984 г. Приставка взорвала мир видеоигр и стала настоящей сенсацией. Теперь каждый мог в комфортной для него обстановке играть в любые игры, доступные на "Денди". Интересно, что название консоли в Японии было Family Computer или Famicom. А в Европу и США она приехала чуть позже под именем NES.

В Россию консоль попала в 1992 г. и называлась "Денди". Ее копировали и воспроизводили в разных форматах. Правда, на ранних этапах с ней конкурировали имеющиеся "Атари" и ей подобные. Но "Денди" быстро обошла все известные форматы и покорила сердца любителей игр того времени. Однако с приходом новой Genesis или Sega Mega Drive 2, а затем и Sony PlayStation, ей пришлось потесниться на этом рынке.

В современном мире также можно найти версии оригинальной консоли "Денди" в специализированных магазинах и поиграть для так называемого «фана».

"Денди": современная эпоха

Окунуться в волшебный мир игр на "Денди" можно и в современном мире. Для этого имеется масса возможностей. Одна из самых простых и доступных — подключить джойстик от "Денди" к компьютеру. Благодаря рынку электроники приобрести разные варианты устройства можно в интернете или на радиорынках. Современный джойстик для "Денди", как правило, обладает портом USB, посредством которого можно подключить его к ПК. Такой подход содержит минимум манипуляций. Если же есть желание повозиться с паяльником и случайно был обнаружен оригинальный джойстик, то можно подключить и его, создав своими руками специальный переходник.

Подключить джойстик от "Денди" к компьютеру через USB

Первое, что надо сделать для такого подключения, это приобрести джойстик для "Денди". Найти его можно как на специализированных сайтах электроники, так и на различных рынках. Джойстик не обязательно должен быть похож на своего оригинального представителя. Внешне он может выглядеть как от любой другой консоли.

После того как для "Денди" джойстик найден, нужно озаботиться программным обеспечением. Для этого необходимо скачать специальное приложение — эмулятор приставки. Так как официально "Денди" имеет аббревиатуру NES, то и искать соответствующую программу нужно именно по такому запросу. Эмуляторов в сети присутствует масса. Но принцип работы этого приложения один — запуск игр на "Денди" в окне программы.

Эмулятор

После того как эмулятор будет найден и скачан, нужно найти непосредственно игру. Это можно также сделать с помощью поиска на профильных сайтах.

Продемонстрировать, как подключить джойстик от "Денди" к компьютеру, можно на одном из популярных эмуляторов — FCEUX. Его окно выглядит как на фото снизу.

Скачивание и установка не займут много времени, так как программа весит не более 2 мегабайт и проста в освоении.

Теперь настало время подключить и настроить от "Денди" джойстик. Для этого нужно вставить его в порт USB компьютера. Затем в меню эмулятора выбрать пункт Config и перейти в раздел Input.

В открывшемся окне конфигурации для настройки джойстика нажимается пункт Configure. Откроется новый интерфейс, который визуально будет напоминать расположение кнопок на джойстике. Таким образом, нажимая на определяемую его кнопку и задавая соответствующую клавишу на клавиатуре ПК, настраивается поведение в эмуляторе. После установки всех кнопок джойстика нужно все сохранить и выйти в главное окно программы.

Далее нужно найти необходимую игру. Их также имеется много в свободном доступе в интернете. Запуск игр осуществляется через меню File эмулятора, в котором надо выбрать пункт Open ROM. ROM — это образ игры, запакованный в формате, понятном эмулятору. Помимо основных возможностей, программа позволяет сохранять состояние игры в любой момент и также начать её с того же места. Этого не хватало многим детям в эпоху прохождения сложных игр.

Как подключить джойстик от "Денди" к компьютеру через LPT-порт

Разновидностей и клонов приставки "Денди" было выпущено довольно много. Соответственно, джойстики могли иметь разную форму и количество контактов. В большинстве случаев использовались 9 или 15. 9-контактный разъем очень похож на компьютера. Именно это фактор и можно использовать для создания переходника от "Денди" к ПК.

Для начала понадобятся два коннектора — LPT и COM. Их придётся разобрать, чтобы появилась возможность правильно припаять провода. Пайка производится согласно несложной схеме, изображенной на снимке внизу.

Как видно, разъём 1 на джойстике соединяется с разъёмами 5-9 через ряд диодов. Остальные спаиваются напрямую. Соединив провода и припаяв их в нужной последовательности, можно собрать все назад. Переходник готов к первому испытанию.

Драйверы для джойстика

Но перед этим нужно озаботиться программной составляющей оборудования. Так как операционная система не знает, как управлять данным видом джойстика, нужно установить в неё драйвер с необходимой информацией. Естественно, что специально его никто для ПК не разрабатывал. Поэтому придётся воспользоваться универсальными средствами для реализации соединения подобных устройств с компьютером.

Таких программных продуктов много на просторах сети, но лучше воспользоваться приложением PPJoy. Оно оптимизировано для подключения неизвестных устройств наподобие джойстиков к компьютеру, посредством подбора подходящего драйвера.

Сам процесс скачивания и установки прост. После успешной инсталляции на рабочем столе появится иконка данной программы. Запустив её, можно увидеть окно, предлагающее добавить новое устройство в конфигурацию. Нужно нажать кнопку Add. Далее программа выдаст окошко, в котором требуется задать, каким образом будет происходить подключение. В настройках нужно указать следующее:

    параллельный порт — LPT1, соответственно, если он один;

    тип контроллера — SNES или NES;

    тип интерфейса — Linux;

    номер контроллера — Controler 1;

    подтип контроллера — NES.

Теперь осталось нажать на кнопку Add. Этим самым программа добавит устройство в систему. В следующем окне необходимо нажать Done.

После установки всех настроек джойстика нужно его проверить и откалибровать. Для этого в операционных системах Windows есть пункт в Панели управления, именуемый "Игровые устройства". В нем, во вкладке "Свойства", имеется возможность проверить, как реагирует джойстик на нажатия тех или иных клавиш. Если наблюдается какая-либо активность, то джойстик работает, и можно открывать эмулятор. Если нет, то нужно перепаять все заново, так как что-то пошло не так.

Краткий обзор популярных эмуляторов

Небольшой перечень наиболее популярных и удобных рабочих эмуляторов:

    FCEUX. Этот эмулятор уж упоминался в статье. Имеет открытый исходный код и может быть запущен на самых разнообразных системах. Обладает широким выбором настроек и функций.

    iNES. Простой и лёгкий эмулятор для операционной системы Windows. Обладает минимальным пакетом настроек и конфигураций.

    Nestopia. Также имеет Может работать под управлением операционных систем Windows, Linux, Mac OS. Множество настроек и фишек.

    VirtuaNes. Данный эмулятор способен поддерживать световой пистолет, замедление и ускорение игры, а также много настроек, связанных с обработкой видео.

    RetroCopy. Это один из мультиприставочных эмуляторов, способных воспроизводить образы игр не только "Денди", но также и Sega, Nintendo и многих других автоматов и консолей.

Выводы

Конечно, для радиолюбителей будет более интересен второй вариант джойстика "Денди" для ПК. Для простых геймеров, решивших окунуться в ностальгию старых игр, прекрасно подойдёт способ номер 1. Во-первых, стоимость джойстиков с USB не столь велика. К тому же сейчас их купить можно практически на любом углу. Во-вторых, это значительная экономия времени при подключении и калибровке нового устройства.

В сети в большом количестве присутствуют игры "Денди". Играть с джойстиком или на клавиатуре — личный выбор каждого. Но именно полное погружение в атмосферу той эпохи все же даст только всестороннее восстановление игрового процесса.

Энтузиастами "Денди" игры с джойстиком портированы таким образом, чтобы можно было их использовать на большом количестве различных эмуляторов. Ещё одним существенным плюсом является тот факт, что самый простой джойстик можно применять и при эмуляции других приставок, например Sony PlayStation или Sega. Достаточно просто установить соответствующую программу и найти образ нужной игры.

Для справки - разъёмы бывают "папа" - со штырьками и "мама" с дырочками под штырьки, откуда пошли такие аналогии можно только догадываться...

Итак, если Вы уже нашли у себя пару завалявшихся джойстика, необходимые запчасти, инструменты и запаслись энтузиазмом, то можно приступать.

Рассмотрим сначала порт LPT более подробно.

Если кто его не видел, показываю парочку таких выходов:

Если честно, то у себя на задней панели я такого не нашёл и залез поглубже. На материнской плате LPT порт все-таки оказался.

В своей "коллекции" железок откапал необходимый штекер, который и подключил к материнке. Если Вы попали в аналогичную ситуацию и у Вас нет вывода LPT на задней панели системного блока, но он присутствует на материнской плате подобный штекер можно найти на каком-нибудь радио-рынке или у перекупщиков Б/У запчастей для компьютеров. На многих, особенно старых, материнских платах он не припаян жёстко, а выносится именно таким штекером, поэтому найти его не должно составить особого труда:

Если же Вам повезло и у Вас такой выход имеется или Вы все-таки вы нашли этот штекер, то можно приступать к сборке схемы.

Что бы не загружать схему я не стал делать надписи на самой картинке, а все нужные нам контакты обозначил цветами. Отдельные контакты параллельного порта предназначены для различных целей: одни – для ввода, другие – для вывода данных. Особо вдаваться в тонкости работы компьютера и LPT-портов не будем. Думаю, достаточно будет объяснить только те, которые нам понадобятся. Итак:

  • Желтый - Clock
  • Ораньжевые контакты - с них питаем джойстик (около 5В). Обязательно только через диоды , иначе можно спалить LPT контроллер на материнской плате или всю мат. плату!!!
  • Синий - Земля
  • Зеленый - Latch
  • Голубой - Управляющий контакт (10 контакт для первого джойстика, 11 - для второго, 12 - для третьего, 13 - для четвёртого, 15 - для пятого). Имейте В Виду, что штырёк 14 не использован , так как он не является входом параллельного порта.

ВАЖНО: Эта схема и все нижеследующие отображают выходы если смотреть на дырочки,т.е. основной провод выходит "сзади".

Если Вам интересно, то Clock и Latch это два входных бита, которые управляют последовательной передачей.

В виду того, что клонов приставки NES (Денди) было превеликое множество поэтому и разъёмов подключения джойстика к приставке было несколько. Цвета контактов обозначены соответственно цветам в Схеме разъёма LPT. Отличает лишь замена оранжевых контактов одним красным, т.к. питание берётся с 5-ти контактов, а подаётся на джойстик через один. Представлено 3 наиболее распространённых:

Для этих, наиболее распространённых разъёмов привожу соответственно три аналогичные схемы.

На схемах должно быть все достаточно понятно. Но, без комментариев схемы оставить не могу. Во-первых, напомню, что питать джойстик надо через диоды. Что это такое? Это, грубо говоря, выпрямители тока, т.е. они в одну сторону ток пропускают, а в другую нет. Таким образом, с LPT порта ток проходит, а вернуться на него через эти контакты диоды-то и не дают. Проверить диод у Вас в руках или нет Вы можете с помощью обычного мультиметра. Ток должен проходить от LPT к джойстику, а не как не наоборот. Если у Вас нет мультиметра, можете довериться подсказке на диоде - на них наносят полоску или схематичное изображение диода. На картинке ниже стрелкой указано направление протекания тока и соответствующее положение диода.

Таким образом, на диодах есть маркировка, и их следует припаивать полосочкой вверх, как на рисунке ниже. Просто припаиваете проводки по схеме к LPT и все.

Вторым важным моментом является подключение двух и более джойстиков. NES/SNES джойстики имеет линию Data, выше она названа управляющим контактом и на схемах обозначена голубым цветом. Она уникальна для каждого устройства (если их у Вас несколько) и каждый геймпад имеет свой собственный штырёк Data.

(pin 10) -----> Pad 1 data - для первого геймпада
(pin 11) -----> Pad 2 data - для второго геймпада
(pin 12) -----> Pad 3 data - т.д.
(pin 13) -----> Pad 4 data
(pin 15) -----> Pad 5 data

Имейте В Виду, что штырек 14 не использован, так как он не является входом параллельного порта.

После всех манипуляций у меня получилось вот что:

5 одинаковых диода я не нашёл, пришлось один взять отличный от других. Лучше конечно, если все 5 будут одинаковые. Если одинаковых нет, то по параметрам они должны быть примерно одинаковы, т.е. надо что бы сопротивление их не сильно отличалось.

Разъём DB25M можно взять со шнура нуль модема или со старого принтерного кабеля (Centronics"а). Лишь бы он был разборным. Хотя, конечно, можно и разрезать сам кабель и прозвонить мультиметром. Откуда я взял такой разъём? Все с той же "коллекции" компьютерного барахла. С другой стороны мой разъём имел не огрызки проводов с другой стороны, а вполне приличный разъёмчик, который я не стал разбирать, а "понавтыкал" в соответственные "дырки" провода и соединил с разъёмом джойстика. В итоге получилось очень даже аккуратно:

Иногда, особо жадные производители, подключали джойстики к приставке не внешним разъёмом, а внутренним или того хуже - припаивали к плате приставке. Но и из этой ситуации я предлагаю для Вас выход. Разбираем свой джойстик. На фотографиях ниже, я обвёл нужные нам контакты кружечками соответственных цветов. Эти две фотографии, по сути, один и тот же джойстик с разных сторон для наглядности. Две фотографии ниже можно увеличить кликнув по ним. Далее прозваниваем эти контакты с другими концами провода и соединяем по любой из схем выше, что и в случае с путевым разъемом. Только в этот раз у нас не разъём, а заранее промаркированные провода.

Это все что касается аппаратной части. Читайте вторую часть - программную или как правильно настроить драйвера для дендевских джойстиков [появится в ближайшие дни].

Конструкция очень простая. Но, прежде чем проверять сделанный вами интерфейс, дважды убедитесь, что все провода припаяны правильно, и, что никакие оголённые провода не касаются чего-нибудь. Я сильно рекомендую использовать корпус для этих интерфейсов, чтобы уменьшить риск короткого замыкания.

NES И SNES имеют разные разъёмы. Также, есть очень много аналогов NES (среди них наш российский Денди, Кенга и д.р.), и поскольку компания Nintendo использовала патентованные разъёмы для своих фирменных машин, производители клонов не могли повторять их и использовали стандартные разъёмы D-Cannon. Во всяком случае, если у вас есть gamepad, и у него есть кнопки A, B, Turbo A, Турбо B, Select и Begin (последних двух может и не быть) и связывается через 5 проводов, тогда это или NES или аналог NES и будет работать если Вы все сделаете правильно. SNES gamepads также используют 5 проводов, но имеют больше кнопок, поэтому подключаются несколько иначе. Более подробно можете узнать через поисковики...

Теперь небольшой FAQ

Здравствуйте.

Ностальгия по старым временам - чувство сильное и въедливое. Я думаю, меня могут не понять те, кто не играл в приставки Dendy, Sega, Sony PS 1 (и пр.) - многие из тех игр стали нарицательными, многие из тех игр настоящие хиты (которые пользуются спросом до сих пор).

Чтобы играть сегодня в те игры - можно установить специальные программы на компьютер (эмуляторы, о них я рассказывал здесь: ), а можно подключить старую приставку к телевизору (благо, что даже современные модели имеют A/V вход) и наслаждаться игрой.

Но вот большинство мониторов такого входа не имеют (более подробно о A/V здесь: ). В этой статье хотел показать один из способов, как можно подключить старую приставку к монитору. И так…

В ажное отступление! Обычно старые приставки подключаются к ТВ с помощью обычного телевизионного кабеля (но не все). Своего рода стандартом является A/V интерфейс (в простонародье - «тюльпаны») - именно его и буду рассматривать в статье. Всего есть три актуальных способа (на мой взгляд), чтобы подключить старую приставку к новому монитору:

1. приобрести приставку-телевизор (автономный ТВ-тюнер), которую можно подключить напрямую к монитору, минуя системный блок. Таким образом вы просто сделаете из монитора - телевизор! Кстати, обратите внимание на то, что не все подобные устройства поддерживают (A/V) вход/выход (обычно, стоят они несколько дороже);

2. использовать разъемы A/V входов на видеокарте (или на встроенном ТВ-тюнере). Этот вариант я и рассмотрю ниже;

3. использовать какой-нибудь видео-плеер (видео-магнитофон и пр. устройства) - в них очень часто есть композитный вход.

Что касается переходников: стоят они дорого, а их использование не оправдано. Лучше приобрести тот же ТВ-тюнер и получить 2 в 1 - и телевизор и возможность подключать старые устройства.

Как подключить старую приставку к ПК через ТВ-тюнер - пошагово

У меня на полке завалялся старый внутренний ТВ-тюнер AverTV Studio 505 (вставляется в PCI слот на материнской плате). Его и решил испытать…

Непосредственно установка платы в системный блок - операция простая и быстрая. Нужно снять заглушку с задней стенке системного блока, затем вставить плату в PCI слот и закрепить винтиком. Дело 5 минут (см. рис. 2)!

Рис. 3. Титан 2 - современная приставка с играми от Dendy и Sega

Кстати, на ТВ-тюнере есть так же и вход S-Video: вполне возможно воспользоваться переходников с A/V на S-Video.

Следующим шагом было установить драйвера (подробно об обновление драйверов: ) и вместе с ними спец. программу AverTV для управления настройками и показа каналов (идет вместе в комплекте с драйверами).

После ее запуска, необходимо в настройках изменить источник видео - выбрать композитный вход (это и есть A/V вход, см. рис. 5).

Рис. 7. Черепашки ниндзя

На этом статью завершаю. Всем приятной игры!

Думаю многие из вас помнят те славные времена, когда мы часами рубились в танчики, черепашки ниндзя, батлтодс энд даблдрагон и еще пару десятков других суперских игр на Денди. Это было шикарное время! Большинство игр были чертовски сложные, но даже несмотря на это, неудача за неудачей, мы, все равно, шли к своей цели и начинали игру заново, чтобы уж сегодня-то пройти ее до конца.

Поностальгировав всласть, я решил, что очень хочу поиграть в Dendy и поиграть хочу на ноутбуке, но не на клавиатуре, а на старом добром джойстике.

Ниже я опишу, с какими проблемами я столкнулся и как их решил.

Немного поясню, почему именно так мне захотелось поиграть. Приставка у меня сохранилась и она отлично работает, но осталась всего пара картриджей(остальные раздал друзьям). А играть на клавиатуре в игры денди, ну это как-то совсем не айс.

Встала проблема, как подключить джойстик от Денди к ноутбуку.

Немного погуглив, я понял, что в основном это решается подключением через LPT порт и использованием готовых драйверов, но у меня ноутбук, и мне это не подходит. Тут я вспомнил, что у меня есть плата Arduino Uno и я решил, что пойду своим путем и буду использовать именно ее.

0. Определение распиновки на джойстике

Первая проблема оказалась в том, что коннекторы у джойстиков внутренние, а все описания распиновок найденные в интернете, были для внешних коннекторов.

Найти спецификацию на мою noname денди мне не удалось, поэтому я стал рассматривать внутреннюю плату, чтобы найти там питание и землю, и понять какие из пяти контактов на джойстике с ними соединяются. С этим я справился быстро. Оказалось это два крайних контакта.

К Ардуино, я подсоединил все напрямую, питание - питание 5В, земля - земля, остальные три контакта подсоединил к 2, 3 и 4 цифровому пину.

1. Описание протокола работы джойстика

Оказалось не так-то просто найти эту информацию. Лишь несколько сообщений на паре форумов. Лично мне помогла эта запись: code.google.com/p/avrtoys/wiki/joystick , а именно этот код: avrtoys.googlecode.com/svn/trunk/joystick/main.c . А вот ссылка на упомянутую в этой записи заметку в журнале Радио: ftp.radio.ru/pub/arhiv/1996/06-96/46-6-1996.gif . Из всего этого я сделал вывод, что нужно подать сигнал на Latch, а потом 8 раз подавать сигнал на Clock и каждый раз считывать значение с Data, в котором после каждого Clock-а будет содержаться информация о следующей кнопке джойстика.

2. Настройка среды

Если у вас уже все настроено или вас устраивает Arduino IDE, можете перейти к 3 пункту.
Не знаю, как вас, но лично меня официальная Arduino IDE ужасно угнетает, поэтому коротко расскажу, как использовать свою любимую IDE.
Первым делом я скачал исходники Arduino IDE и нашел там код отвечающий за компиляцию и аплоад прошивки. Потратив немного времени я выделил все команды, которые там используются:
#!/bin/bash avr-gcc -c -g -Os -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000UL -I /usr/share/arduino/hardware/arduino/cores/arduino -I /usr/share/arduino/hardware/arduino/variants/standard $filename.cpp -o $filename.o avr-gcc -Os -Wl,--gc-sections -mmcu=atmega328p -o $filename.elf $filename.o libArduino.a -lm avr-objcopy -O ihex -R .eeprom $filename.elf $filename.elf.hex avrdude -V -p m328p -b 115200 -c arduino -P /dev/ttyACM0 -U flash:w:$filename.elf.hex
В приведенной выше команде, при линковке, используется библиотека libArduino.a, ее можно получить скомпилировав все *.c и *.cpp файлы из папки с хэдэрами и собрав все объектники в один архив. А можно просто запустить Arduino IDE, скомпилировать любой проект и скопировать файл /tmp/build*.tmp/core.a. Это будет абсолютно эквивалентно.
Все эти команды актуальны для Arduino Uno, для других ардуин следует изменить некоторые параметры.

Теперь используя эти команды можно легко настроить свою IDE, на автоматическую компиляцию и загрузку прошивки.

3. Написание кода прошивки

Здесь нужно было лишь определить какие из 2, 3 и 4 пина отвечают за Latch, Clock и Data. Это я решил методом проб и ошибок. Предполагаем, что 4 это Data, и делаем Serial.println(digitalRead(4)), если при нажатии кнопок есть какая-то реакция, значит это оно. Остальные 2 контакта определились, когда уже была написана прошивка, если все работает значит угадали, нет - меняем местами.

Код, повторюсь, писался на основе avrtoys.googlecode.com/svn/trunk/joystick/main.c :

Код прошивки

#include const int data = 2; const int latch = 3; const int clock = 4; const int TICK = 2; void init_joystick(int data, int latch, int clock) { pinMode(data, INPUT); pinMode(clock, OUTPUT); pinMode(latch, OUTPUT); digitalWrite(clock, HIGH); } int get_keys_state_joystick(int data, int latch, int clock) { digitalWrite(latch, HIGH); delayMicroseconds(TICK); digitalWrite(latch, LOW); int keys_state = 0; for (int i = 0; i < 8; ++i) { delayMicroseconds(TICK); digitalWrite(clock, LOW); keys_state <<= 1; keys_state += digitalRead(data); delayMicroseconds(TICK); digitalWrite(clock, HIGH); } return keys_state; } void setup() { init_joystick(data, latch, clock); Serial.begin(57600); } void loop() { Serial.write(get_keys_state_joystick(data, latch, clock)); }


В результате я получил 1 байт содержащий в себе информацию о всех 8-ми кнопках джойстика, о каждой в соответствующем бите. У меня получилось следующее расположение: A, B, Select, Start, Up, Down, Left, Right. После этот байт отправляется на компьютер, где принимается и обрабатывается моим «драйвером».
Несложно заметить, что можно легко подключить второй джойстик.

4. Написание «драйвера»

Здесь нужно было принять этот самый байт от Arduino и эмулировать нажатия кнопок клавиатуры. Да-да, нажатия на джойстике будут обрабатываться, как нажатия на клавиатуре, хорошо это или плохо.
В качестве языка программирования я выбрал Python. Простой и эффективный, полагаю, он отлично подошел для этой задачи.

Единственная проблема, которая здесь возникла это дребезг контактов джойстика. Я ее решил путем введения временного интервала, наступающего после смены состояния кнопки, в течение которого состояния не изменяется. Хватило 0.05 с.

Для эмуляции нажатия кнопок клавиатуры я использовал утилиту xte, идущую в комплекте Xautomation. Она очень проста в использовании, вот пример: xte "keydown Left" . За дополнительной инфорацией смотрите man xte.

Для выхода из драйвера я использовал состояние, когда нажата вся крестовина целиком. Этому состоянию соответствует число 0xf0.

Код драйвера

#!/usr/bin/python import serial import os import time def bool_to_updown(val): if val: return "up" else: return "down" exit_keys = 0xf0 delta_time = 0.05 keys = [["Right", False, 0.0], ["Left", False, 0.0], ["Down", False, 0.0], ["Up", False, 0.0], ["s", False, 0.0], # START ["a", False, 0.0], # SELECT ["x", False, 0.0], # B ["z", False, 0.0]] # A ser = serial.Serial("/dev/ttyACM0", 57600) keys_state = 0 while keys_state != exit_keys: keys_state = ord(ser.read()) for i in range(8): if not bool(keys_state & (1 << i)) != keys[i] and time.time() - keys[i] > delta_time: os.system("xte "key{0} {1}"".format(bool_to_updown(keys[i]), keys[i])) keys[i] = not keys[i] keys[i] = time.time() for i in range(8): os.system("xte "keyup {0}"".format(keys[i])) ser.close() print("Goodbye!")

5. Ура! Играем!

Все! Осталось лишь настроить эмулятор денди, я выбрал FCEUX.
Указываем в настройках те клавиши, которые указаны в драйвере ииии вспоминаем детство!

Заключение

На самом деле есть и другие, возможно, более эффективные способы использования Ардуино в данной ситуации. Например, если у вас Arduino Leonardo, то можно использовать объект Keyboard для прямой посылки команд клавиатуры на компьютер. Так же можно, как я понял, перепрошить Ардуино так, чтобы она отображалась, как джойстик/клавиатура/мышь и так же напрямую посылать команды. Вот туториал: http://mitchtech.net/arduino-usb-hid-keyboard/ . Впрочем, мой способ меня полностью устраивает и результатом я более чем доволен.

Как ни крути, но Ардуино это замечательная платформа для подобных экспериментов.
Теперь осталось только собрать все это в виде отдельного устройства.

Ну и видео напоследок:

Похожие публикации