usb hid jostik
- Войдите на сайт для отправки комментариев
Пнд, 28/09/2015 - 13:36
Доброго времени суток уважаемые форумчане.
задался целью сделать USB Hid jostik (чтоб устанавливался в ОС Windows без драйверов)
сложность что надо сделать на 28 кнопок.
перечитал море информации, но не доконца понятно что и как делать.
мои попытки привели к тому я сvог на базе arduino micro и/или подобной ей плате teensy сделать usb клавиатуру.
// для Arduino leonardo раскоменитировать и закоментировать teensy int rows[] = {4,5,6,7,8,9,10}; //указываем пины строк int cols[] = {A3,A4,A5,A6}; //и столбцов /* // для teensy раскоментировать и закоментировать Arduino int rows[] = {3,4,5,6,7,8,9}; //указываем пины строк int cols[] = {A3,A4,A5,A6}; //и столбцов */ char keys[] = { 'q', // 1 'w', // 2 'e', // 3 'r', // 4 '2', // 5 'y', // 6 'u', // 7 'i', // 8 'o', // 9 'p', // 10 'a', // 11 's', // 12 'd', // 13 'f', // 14 'g', // 15 'h', // 16 'j', // 17 'k', // 18 'l', // 19 'z', // 20 'x', // 21 'c', // 22 'v', // 23 'b', // 24 'n', // 25 'm', // 26 '1', // 27 't', // 28 }; int keyStates[] = { 0,//0 0,//1 0,//2 0,//3 0,//4 0,//5 0,//6 0,//7 0,//8 0,//9 0,//10 0,//11 0,//12 0,//13 0,//14 0,//15 0,//16 0,//17 0,//18 0,//19 0,//20 0,//21 0,//22 0,//23 0,//24 0,//25 0,//26 0,//27 }; #define COLS 4 // количество столбцов #define ROWS 7 // количество строк //=============================== #define LED 13 void setup() { Keyboard.begin(); //============================== pinMode(LED, OUTPUT); int i=0; for(i=0;i<COLS;i++) { pinMode(cols[i], INPUT_PULLUP);} for(i=0;i<ROWS;i++) { pinMode(rows[i], INPUT);} } void loop() { int i; int j; //============================ digitalWrite(LED, HIGH); for(i=0;i<COLS;i++) { for(j=0;j<ROWS;j++) { pinMode(rows[j], OUTPUT); digitalWrite(rows[j], LOW); int sensorValue = analogRead(cols[i]); pinMode(rows[j], INPUT); int index = i*ROWS+j; if(sensorValue < 512) {keyStates[index] = 1; } else {keyStates[index] = 0; } } } for(i=0;i<COLS*ROWS;i++) { char key = keys[i]; if(keyStates[i] == 1) {Keyboard.press(key); } else {Keyboard.release(key); } } //========================== digitalWrite(LED, LOW); delay(1); }
как видно из кода клавиатура основана на матрице 7*4
код полностью работчий и опробован, Все бы ничего если бы не одно НО.
при одновременном нажатии более 3 кнопок игра начинает вылетать и происходят разные лаги.
немного поразмыслив понял что желательно бы сделать что то типо геймпада где предусмотренно одновременное нажатие нескольких клавиш сразу.
стало быть (подумал я ) можно использовать стандарный скетч от teensy в этом варианте на каждую кнопку выделен свой пин.
Залил скетч в teensy 2.0 проверил- да то что надо, в игровых устройсвах виден джойстик одновременно можно нажимать все кнопки.
Все бы хорошо если бы не одно но , на teensy 2.0 можно подключиться к 23 пинам а мне нужно 28. (по сути это будет один контролер на 2 джостика).
смотрел в сторону teensy ++, там пинов хватило бы вот только цена на них неразумная, в китая порядка 35$
сидел думал что к чему ,
1 нужно сделать устройство типо usb hid
2 контроллеры в корпусе типа TPQF я не распаяю стало быть нужно в dip корпусе.
3 нужен загрузчик чтоб можно было контроллер прошивать.
4 usb реализация.
ну и собственно сам вопрос. пока еще не успел потратить деньги.
1) стоит ли делать на atmega 16? почему именно этот контроллер : много ног, корпус dip, програмная реализация USB
2) если так посоветуйте где почитать реализацию USB для чайников чтоб по шагам было . а то перелопатил кучу инфы,
понял только то что нужно написать HID дескриптор и при компиляции подключить библиотеку V-USB.
а что, как, зачем я так и не понял.
в моей голове сейчас каша
!) USB к atmega16 подпаяю без проблем. схем в нете полно.
2)дескриптор сгененерировал с помощью программы HID desckriptor сохранил в формате hid
3)есть библиотека v-usb
и
есть скетч от teensy,
но как это все вместе увязать не понимаю.
(HELP, SOS) помогите разобраться.
натолкните что почитать, (USB org не предлогать - там и черт ногу сломит)
вообще больше месяца ищу инфу подробной инструкции не нашел.
P/S Всем откликнувшимся спасибо,
а причем тут analogread если цифровой сигнал?
а причем тут analogread если цифровой сигнал?
Спасибо за замечание.
ну да можно и читать как dijitalread .
но все равно сути это не меняет.
а ты когда считываешь кнопки, сначала проведи сканирование всей клавиатуры, и если обнаружишь не одно нажатие то проводи повторно, либо расставь приоритет
а лучше 74hc165 поставь и сканируй все кнопки. если возможны одновременные нажатия, а у тебя скорее всего возможны так как ты скорее всего делаешь клавиатуру для игры, и сканироваться будут кнопки каждая отдельно, и даже одновременное нажатие можно передать, просто назначить последовательность. например массив заполнять . 1 это нажатая кнпока, а потом передавать по usb по порядку только те которые имеют 1. после передачи массив обнулить и снова сканировать
ну или без массива было срабатывание - отправили
а ты когда считываешь кнопки, сначала проведи сканирование всей клавиатуры, и если обнаружишь не одно нажатие то проводи повторно, либо расставь приоритет
а лучше 74hc165 поставь и сканируй все кнопки. если возможны одновременные нажатия, а у тебя скорее всего возможны так как ты скорее всего делаешь клавиатуру для игры, и сканироваться будут кнопки каждая отдельно, и даже одновременное нажатие можно передать, просто назначить последовательность. например массив заполнять . 1 это нажатая кнпока, а потом передавать по usb по порядку только те которые имеют 1. после передачи массив обнулить и снова сканировать
ну или без массива было срабатывание - отправили
1 ) чесно сказать не приходит в голову как это поможет и как это сделать. (програмистом меня не назвать, я начинающий самоучка)
2) тоже думал в сторону сдвиговых регистров.
но как принимать с них значения как их расшифровывать и отправлять в комп не знаю,
(думаю стоит почитать)
но все равно хотелось бы научиться делать самодельные устройства , типа проэкта Mjoy / тоесть что в будующем можно было добавить потенциометры на всякие педали газа и т.д.
да, вы верно подметили устройство предназначаеться для игр. хочу собрать коробочку что то типо

класно бы было подключил и играем, причем клава ноутбука или компа не пострадает
вообще в планах потом подключать это устройство к raspberry/ на котором будут установлены эмуляторы игры денди сега и т.д
да и если быть чесным уже скачал образ emulatostantion на raspbery проверил на простых джостиках работает.
но опять же в будующем хотелось бы иметь возможность добовлять "крутилки" потому и хочу научиться делать свое устройство.
планирую сделать платку на базе atmege 16 по следующей схеме
как у же говорил схему соберу без проблем.
вот только какие дальнейшие мои действия?
1) залить в атмегу USBASPloader (планирую залить с помощью arduino Uno на крайняк имееться програматор minipro)
2) нужен hid descriptor (думаю вытащить из примера для teensy )
3) нужен код (хотелось бы чтоб код был простой и понятный на подобие того что в моем втором посте , который от teensy )
4) подозреваю что нужно получить hex файл для прошивки контроллера,
чтоб получить этот самый заветный файл нужно (поправте если ошибаюсь) atmel studio скомпелировать файл дескриптора и прошивки (никогда этого не делал- ток поставил на скачку студию)
собственно какие шаги я еще не учел ?
простите за глупые вопросы
ну вот по моему использовать USBASPloader когда есть arduino micro смысла нет
а гуглить слабо?
http://robocraft.ru/blog/arduino/520.html
ну вот по моему использовать USBASPloader когда есть arduino micro смысла нет
а гуглить слабо?
http://robocraft.ru/blog/arduino/520.html
ну это как бы логично что есть ардуино микро. ток там пинов мало. Делать придеться матрицу. а я в ней не уверен.
хочу повесить 28 кнопок на 28 пинов.
для того чтобы играя к примеру в "мортал комбат" можно было одновременно нажать 6 кнопок.
нет не слабо. я как раз читал эту статью http://robocraft.ru/blog/arduino/618.html
вот только какие дальнейшие мои действия?
собственно какие шаги я еще не учел ?
собираешь оригинальный джойстик MJoy16
8 осей, 64 кнопки, тумблеры, энкодеры, автокалибровка
http://www.joysticks.ru/joysticks/handmade/mjoy16.shtml
*загрузчки, дескрипторы, хекс файл на складе получить... о, чём это всё? собирай джойстик и играй
вот только какие дальнейшие мои действия?
собственно какие шаги я еще не учел ?
собираешь оригинальный джойстик MJoy16
8 осей, 64 кнопки, тумблеры, энкодеры, автокалибровка
http://www.joysticks.ru/joysticks/handmade/mjoy16.shtml
*загрузчки, дескрипторы, хекс файл на складе получить... о, чём это всё? собирай джойстик и играй
Спасибо за наводку буду пробовать.
Правда на этом сайте уже готовый hex файл, просто залив его в контроллер, Я не научусь делать usb устройство под себя. Ну допустим со своим именем устройства. Или например мне не нужно 8 осей. Хотелось бы во всем этом разобраться. Ну и на том спасибо начну с малого а там видно будет .
Правда на этом сайте уже готовый hex файл, просто залив его в контроллер, Я не научусь делать usb устройство под себя. Ну допустим со своим именем устройства. Или например мне не нужно 8 осей. Хотелось бы во всем этом разобраться.
ок. учись делать своё устройство - через пять лет покажешь результат.
Правда на этом сайте уже готовый hex файл, просто залив его в контроллер, Я не научусь делать usb устройство под себя. Ну допустим со своим именем устройства. Или например мне не нужно 8 осей. Хотелось бы во всем этом разобраться.
ок. учись делать своё устройство - через пять лет покажешь результат.
Специально для песимистов сообщаю. Есть проэкт mmjoy . Програмка такая. подключаем свою плату выбираем необходимое количество кнопок осей тумблеров, название устройства и т.д.
Проффесор калапауций простите что разочаровал вас и не заставил ждать 5 лет.