=19GvFAB=Metr 9 Posted August 12, 2014 Отличная тема,много примеров... Вот такой есть вопросик - где бы резисторами разжиться ихними? Может кто знает?Раньше в КомпТуРу были... Share this post Link to post Share on other sites
Tche 121 Posted August 12, 2014 У меня вопрос к освоившим программирование СН джентльменам. Каким образом вы определяете какая ось какого устройства соответствует определенному наименованию? %DEFINE J_Pedals JS1.A3 // Педали ( CH ProPedals, педали на первой вкладке ) вот как в цитате, почему педали не JS3.A1 например?У кота все оси поименованы и там невозможно их перепутать. А вот СН у меня возникли проблемы, не понимаю что откуда. Хотел разобраться подробнее с системой программирования СН и чего то много неочевидных вещей как-то. Share this post Link to post Share on other sites
NobbyNobbs 6318 Posted August 12, 2014 (edited) вот как в цитате, почему педали не JS3.A1 например? У кота все оси поименованы и там невозможно их перепутать. А вот СН у меня возникли проблемы, не понимаю что откуда. Хотел разобраться подробнее с системой программирования СН и чего то много неочевидных вещей как-то. в принципе, в ГУЕ всегда видно ху есть кто. vs Edited August 12, 2014 by NobbyNobbs 1 Share this post Link to post Share on other sites
Tche 121 Posted August 12, 2014 Спасибо за оперативный ответ! Share this post Link to post Share on other sites
[IB]Zulu 835 Posted August 12, 2014 Отличная тема,много примеров... Вот такой есть вопросик - где бы резисторами разжиться ихними? Может кто знает?Раньше в КомпТуРу были... Раньше были, да.. Потому что у CH был собственный "магазин" запчастей к их джоям. Резюки, пружины, кнопули. Удивительно дело! Тока закрыли они его. Их джои и так по десятку лет служат игрокам, и если им еще и резюки в запчасти давать, то кому они новые продавать будут??? Ну это все лирика. Я недавно озадачился темой, хотел купить в запас (Комбатстику уже почти 6 лет наверное,). Ведь раньше то были! ОКазалось: Чичас нигде не купить. Даже на ебае. Резюки там военные ( CTS HP 100) с MIL допуском. 2 млн. циклов наработки на отказ!!!! (для сравнения, типовые потенциометры в бытовой радиоэлектронике и дешевых джоях имеют заявленную жизнь 15000 циклов ) Оригинальные карбоновые: Исходя из надежностных характеристик можно попробовать заменить такими (серия P30L - керамометалика). Форма другая, но шток похоже одинаковый. Брать нужно тип А (линейные) Share this post Link to post Share on other sites
72AG_terror 115 Posted August 12, 2014 Отличная тема,много примеров... Вот такой есть вопросик - где бы резисторами разжиться ихними? Может кто знает?Раньше в КомпТуРу были... Сейчас с ними -- беда. Самый простой вариант (за исключением аналогов) -- купить БУ ручку (на запчасти) на ebay. Share this post Link to post Share on other sites
[IB]Zulu 835 Posted August 12, 2014 (edited) Угу, и самый классный БУ вариант, это наверное ТроттлКвадрант. Там резюков Аж 6, и износ будет минимальный, ведь не РУС. Тока бушных квадрантов очень мало предлагается, и цена вовсе не бросовая... Хотя... может просто долго не лежат? Edited August 12, 2014 by [I.B.]Zulu Share this post Link to post Share on other sites
=19GvFAB=Metr 9 Posted August 12, 2014 (edited) Может что-то в Чип-Дипе поискать? Комбатстику уже почти 6 лет наверное А я Файтерстик где-то в 2005-2006 брал если память не изменяет.Один раз резюки менял уже. В общем,написал в саппорт СН,посмотрим что ответят. Насчёт Квадранта идея хорошая !!! Edited August 12, 2014 by =DF=Metr Share this post Link to post Share on other sites
72AG_terror 115 Posted August 12, 2014 (edited) Угу, и самый классный БУ вариант, это наверное ТроттлКвадрант. Там резюков Аж 6, и износ будет минимальный, ведь не РУС. Тока бушных квадрантов очень мало предлагается, и цена вовсе не бросовая... Хотя... может просто долго не лежат? По слухам в квадранте они припаяны, их оттеда трудно выдрать. Хотя, очень трудно поверить в это. Edited August 12, 2014 by 72AG_terror Share this post Link to post Share on other sites
[IB]Zulu 835 Posted August 12, 2014 (edited) Ну да, которые на рычагах (т.е. HP100). Ножками впаяны. Верно. Но пяльник и шинка для впитывания припоя тебе в помощь. Смотри тут: Edited August 12, 2014 by [I.B.]Zulu Share this post Link to post Share on other sites
=19GvFAB=Metr 9 Posted August 15, 2014 (edited) Вот нашёл кой чего:http://www.ebay.com/itm/CTS-100k-Ohm-Rotary-Potentiometer-295-S1064-Qty-3-/221168438352?pt=LH_DefaultDomain_0&hash=item337eaa8c50#ht_1389wt_1363 Похожи? ЗЫ Надеюсь,не будет рекламой... Edited August 15, 2014 by =DF=Metr Share this post Link to post Share on other sites
[IB]Zulu 835 Posted August 15, 2014 (edited) Вот нашёл кой чего:http://www.ebay.com/itm/CTS-100k-Ohm-Rotary-Potentiometer-295-S1064-Qty-3-/221168438352?pt=LH_DefaultDomain_0&hash=item337eaa8c50#ht_1389wt_1363 Похожи? ЗЫ Надеюсь,не будет рекламой... Ой, похоже, что да, они! Продают по 3 шт. в руки. Если будешь брать, возьми и мне два комплекта, что бы хоть не оплачивать несколько раз пересылку копеечных бандеролек. Деньги сразу тебе вышлю. Цену доставки досюда можешь делить пополам Edited August 15, 2014 by [I.B.]Zulu Share this post Link to post Share on other sites
=19GvFAB=Metr 9 Posted August 15, 2014 Чего-то не получается связаться с продавцом.Надо узнать,сколько стоит пересылка. Share this post Link to post Share on other sites
[IB]Zulu 835 Posted August 15, 2014 Может, еще не проснулись? Часовой пояс. Ведь Америка ж Share this post Link to post Share on other sites
[IB]Zulu 835 Posted August 15, 2014 Хе, а ты сюда смотрел: http://www.project-parts.com/itempix/530-014B.jpg - резьбы нет! Но это правда фигня, можно верхнюю крышку от исходного поставить ( с резьбой). Просто меня стали терзать смутные сомнения, что же это за резюки такие, и откуда они взялись в таком количестве, по такой смешной цене, и без резьбы. Share this post Link to post Share on other sites
=19GvFAB=Metr 9 Posted August 19, 2014 "Этот продавец будет отсутствовать до 29.08.2014 и в данный момент не может обработать заказ. Вы можете добавить этот товар в список отслеживания и купить его позже." Вот наверное почему не получается связаться.Кстати,саппорт СН тоже молчит. Share this post Link to post Share on other sites
[IB]Zulu 835 Posted August 20, 2014 (edited) "Этот продавец будет отсутствовать до 29.08.2014 и в данный момент не может обработать заказ. Вы можете добавить этот товар в список отслеживания и купить его позже." Вот наверное почему не получается связаться.Кстати,саппорт СН тоже молчит. Пожалуй, что так. Кстати - в Throttle Quadrant именно такие, без резьбы оказывается. Они там за ножки в плату впаяны. Так что, ждем 29-го Edited August 20, 2014 by [I.B.]Zulu Share this post Link to post Share on other sites
=19GvFAB=Metr 9 Posted August 20, 2014 Вообще,когда менял их в файтерстике резьбы там не помню.Они вставляются в отверстия.Разберу-посмотрю. Share this post Link to post Share on other sites
[IB]Zulu 835 Posted August 20, 2014 В педалях точно с резьбой. Самолично подтягивал Да и тут в общем то резьба изображена. Видимо есть варианты. Share this post Link to post Share on other sites
=19GvFAB=Metr 9 Posted August 25, 2014 Здравствуйте, Я сожалею, но мы не продаем частей части. Джон Soucy Технический Представитель APEM, Inc. 970 Park Center Drive Vista, CA 92081 Офис: (760) 598-2518 ответ от CH Products на мой вопрос по поводу резисторов.Жаль. Разбирал Файтерстик,резьбы нету.Просто вставляются в отверстия они. Share this post Link to post Share on other sites
[IB]Zulu 835 Posted August 25, 2014 Разбирал Файтерстик,резьбы нету.Просто вставляются в отверстия они. Ок. Отлично. Значит надо заказывать! Share this post Link to post Share on other sites
beretta5 36 Posted August 26, 2014 (edited) Братья пацаки тупой вопрос но всё таки.Один скрипт я сделал,он работает.А как сделать другой скрипт?Как открыть новую вкладку в CM editor? Edited August 26, 2014 by beretta5 Share this post Link to post Share on other sites
Maxyman 299 Posted August 27, 2014 Всю логику можно реальзовать в одном скрипте. Как я понимаю каждой конфигурации (map файл), может соответсвовать один скрипт файл. Т.е. возможности открыть еще одну вкладку нет. CH Control Manager штука, конечно, архаичная, но дело свое делает на отлично. Share this post Link to post Share on other sites
=19GvFAB=Metr 9 Posted August 27, 2014 День добрый! К сожалению, сейчас резисторов нет в наличии. Мы попробуем уточнить у производителя возможность отгрузки резисторов, но поставка может растянуться на пару месяцев. С уважением, Светлана Шахова www.comp2.ru Ответили из комптуру. Share this post Link to post Share on other sites
[IB]Zulu 835 Posted August 27, 2014 Прикол, думаю они спросят там же где и ты И получат тот же ответ ИМХО, надо ждать 29-го, когда возобновит поставку "отпускник" с ebay Share this post Link to post Share on other sites
=J13=Moroka 742 Posted August 28, 2014 (edited) Ещё немного о программировании "правильных" Sрiftов... Как известно в самом GUI ControlManagera шифтование "неправильное" . Правильное, это когда кнопка Shift определяет сценарий действия только в момент нажатия "рабочей" кнопки, и не может изменить/заменить выполняемую команду, пока рабочая кнопка остается нажатой. И эту тему здесь поднимали. И, спасибо Wespe, был предложен "алгоритм Wespe" (c) работающий с одним шифтом, а затем и "расширенный алгоритм Wespe" от Nobby аж с тремя шифтами... Опыт программирования с этим алгоритмом показал его удобство для шифтования одной - двух-трех кнопок или сразу нескольких шифтов. Однако, при увеличении количества шифтуемых кнопок скрипт начинает увеличиваться как... "Война и мир" Решал очередной раз задачки по назначению нескольких функций на одну позицию хатки с помощью доп. кнопок Shift... Захотелось зашифтовать все 3 Hatки(Hat POV, Hat2 и Hat3) моего ProThrottle, что "задействованы" под большой палец. И пришел к более компактному решению... Кстати, это решение актуально и для владельцев Fighterstick. У него вообще, вместе с POV хаток под большой палец аж четыре! Расположение всех хаток "под большой палец" исключает нажатие 2-х и более Hat одновременно. Поскольку правильно "считать" значение Shifta именно в момент нажатия рабочей кнопки/отклонения любой хатки. С этой задачей прекрасно справляется последовательность: поехали (с) SEQUENCE WAIT(Что-то нажали); // Как только что-то из рабочих кнопок/хаток нажали ФлагШифта = Кнопка__Для_Шифта; // Запоминаем состояние Кнопка__Для_Шифта на этот момент ENDSEQUENCE //Потом, собственно пользуемся плодами... IF (ФлагШифта был нажат) THEN команда1 с шифтом команда2 с шифтом ...... командаN с шифтом ELSE // ...а если ФлагШифта был не нажат команда1 без шифта команда2 без шифта ...... командаN без шифта ENDIF IF (Все_кнопки_отпустили) THEN // кончаем!!! ФлагШифта = False; // сбрасываем т.е. ENDIF приехали Осталось определиться с условиями "Что-то нажали" и "Все_кнопки_отпустили". И тут нам в помощь ещё одна особенность Managera. Это "...четыре дополнительные кнопки, которые указывают на положение кнюппеля и хаток в их центральном положении...": B21 - Центр Хатки 1 B22 - Центр Хатки 2 B23 - Центр Хатки 3 B24 - Центр Кнюппеля (4) Тогда условие "Все_кнопки_отпустили" =( js1.B22 and js1.b23 and js1.b24), а "Что-то нажали" = NOT("Все_кнопки_отпустили"). Итоговый скрипт для одного шифта (кнопка В2 под указ. пралец) 2-х хаток и кнюппеля: //% define shift b1//флаг шифта%define HatRel b2 //флага отпусканя всех хаток///scriptHatRel = js1.B22 and js1.b23 and js1.b24;SEQUENCEWAIT(not HatRel); // если любой из hat отклонёнshift = js1.b2; // Запоминаем состояние Shift1 (по кнопке JB2)ENDSEQUENCE//If (shift) Thencms.b9 = js1.b9; // hat2cms.b10 = js1.b10; // hat2cms.b11 = js1.b11; // hat2cms.b12 = js1.b12; // hat2cms.b13 = js1.b13; // hat3cms.b14 = js1.b14; // hat3cms.b15 = js1.b15; // hat3cms.b16 = js1.b16; // hat3cms.b17 = js1.b25; // hatPOVcms.b18 = js1.b27; // hatPOVcms.b19 = js1.b29; // hatPOVcms.b20 = js1.b31; // hatPOVElsecms.b1 = js1.b9;cms.b2 = js1.b10;cms.b3 = js1.b11;cms.b4 = js1.b12;cms.b5 = js1.b13;cms.b6 = js1.b14;cms.b7 = js1.b15;cms.b8 = js1.b16;cms.b21 = js1.b25;cms.b22 = js1.b27;cms.b23 = js1.b29;cms.b24 = js1.b31;EndifIf( HatRel ) then // если все hat отпущеныshift = false; // Сбрасываем "нажатие" ShiftаEndif//ENDSCRIPT Теперь, после того как сам скрипт стал коротким, самое муторное прописать назначения в GUI. Надо будет прописать: Buttons DirectX Device DirectX Control для mcs.b1 CM Device1 Button9 для mcs.b2 CM Device1 Button10 для mcs.b3 CM Device1 Button11 и т.д. до для mcs.b24 CM Device1 Button32 Чтобы не мучаться, комплект файлов Shift_On_3_Hat внизу И ещё один демо скрипт Shift_3_On_Hat Здесь в качестве рабочих кнопок Hat2 и Hat3, зато в качестве 3-х шифтов задействованы кнопки B2, B3, (под указ. и средн. палец) и их сочетание (B2+B3). Результат смотреть на Device2 // CMS Script File// Реализация 3-х шифтов для 2-х Хаток%DEFINE shift1 b1//флаг для 1-ого шифта%DEFINE shift2 b2//флаг для 2-ого шифта%DEFINE shift3 b3//флаг для 3-ого шифта//script// cms.b17 = js1.B22 and js1.b23; // контроль нажатия/отпускания хатокSEQUENCEWAIT( not (js1.B22 and js1.b23 )); // если любой hat отклонёнshift1 = js1.b2 and not js1.b3; // Запоминаем состояние Shift1 (по кнопке b2)shift2 = js1.b3 and not js1.b2; // Запоминаем состояние Shift2 (по кнопке b3)shift3 = js1.b2 and js1.b3; // Запоминаем состояние Shift3 (по кнопкfv b2+b3 вместе)ENDSEQUENCE//If (shift1) then // действия если активен шифт1cms.b9 = js1.b9;cms.b10 = js1.b10;cms.b11 = js1.b11;cms.b12 = js1.b12;cms.b13 = js1.b13;cms.b14 = js1.b14;cms.b15 = js1.b15;cms.b16 = js1.b16;elseIf (shift2) then // действия если активен шифт2cms.b17 = js1.b9;cms.b18 = js1.b10;cms.b19 = js1.b11;cms.b20 = js1.b12;cms.b21 = js1.b13;cms.b22 = js1.b14;cms.b23 = js1.b15;cms.b24 = js1.b16;elseIf (shift3) then // действия если активен шифт3cms.b25 = js1.b9;cms.b26 = js1.b10;cms.b27 = js1.b11;cms.b28 = js1.b12;cms.b29 = js1.b13;cms.b30 = js1.b14;cms.b31 = js1.b15;cms.b32 = js1.b16;else // действия если без шифтаcms.b1 = js1.b9;cms.b2 = js1.b10;cms.b3 = js1.b11;cms.b4 = js1.b12;cms.b5 = js1.b13;cms.b6 = js1.b14;cms.b7 = js1.b15;cms.b8 = js1.b16;EndifEndifEndifIf( js1.B22 and js1.b23) then // если все hat отпущеныshift1 = false; // Сбрасываем "нажатие" Shift1Endif//endscript Комплект файлов Shift_3_On_Hat Shift_On_3_Hat.zip Shift_3_On_Hat.zip Edited August 28, 2014 by =J13=Moroka 1 Share this post Link to post Share on other sites
=J13=Moroka 742 Posted August 28, 2014 (edited) ...Вы будете смеяться, но случайно обнаружил, что эти алгоритмы можно ещё упростить Последняя проверка а-ля "Все кнопки отпустили" не нужна! т.е. общая картина выглядит так: SEQUENCE WAIT(Что-то нажали); // Как только что-то из рабочих кнопок/хаток нажалиФлагШифта = Кнопка__Для_Шифта; // Запоминаем состояние Кнопка__Для_Шифта на этот моментENDSEQUENCE//Потом, собственно пользуемся плодами...IF (ФлагШифта был нажат) THENкоманда1 с шифтомкоманда2 с шифтом......командаN с шифтомELSE // ...а если ФлагШифта был не нажаткоманда1 без шифтакоманда2 без шифта......командаN без шифтаENDIFIF (Все_кнопки_отпустили) THEN // кончаем!!!ФлагШифта = False; // сбрасываем т.е.ENDIF Прикрепил исправленные файлы... ПыСы: Это ж надо было неделю во все это смотреть, чтобы только сейчас обнаружить ... Shift_On_3_Hat.zip Shift_3_On_Hat.zip Edited August 28, 2014 by =J13=Moroka 1 Share this post Link to post Share on other sites
72AG_terror 115 Posted August 28, 2014 (edited) Не понял, только, зачем делать отдельный SEQUENCE, когда узнать, в каком кнопка положении нужно только один раз за проход. Не проще ли так: %DEFINE Shift JS1.B4 script if ( Shift ) .... else .... endif endscript sequence, по-мне, так нужен только тогда, когда нужно обсчитывать что-то непрерывно изменяющееся, например движение оси с кнопки (пока нажато, то....), но при этом нужна специфическая задержка, а основноый скрипт задерживать нельзя. Например ось с кнопки в основной последовательности двигается слишком быстро, нужна задержка. Или, например, мигание АНО со скоростью 10 раз в секунду... ... нужна задержка. Или, например, удержание кнопки определённое время (полный выход закрылок на ЛаГГе -- около 10 секунд). В остальных случаях, когда надо просто отследить, нажато ли то, или это, в данном конкретном проходе, совершенно не нужен sequence. Более того, на sequence наложен ряд ограничений, например он не может находится в блоке if...endif, его сложнее отлаживать и проч. Edited August 28, 2014 by 72AG_terror 1 Share this post Link to post Share on other sites
=J13=Moroka 742 Posted August 28, 2014 (edited) Не понял, только, зачем делать отдельный SEQUENCE, когда узнать, в каком кнопка положении нужно только один раз за проход. Не проще ли так: ...В остальных случаях, когда надо просто отследить, нажато ли то, или это, в данном конкретном проходе, совершенно не нужен sequence... Безусловно, с IF...THEN...ELSE можно обрабатывать шифты... Но это будут неправильные пчелы шифты! Логика будет обрабатываться каждый проход ,хотя нам нужно только один раз, при нажатии хатки. Возможны ошибки: отпустил шифт раньше основной кнопки - сработала команда "без шифта" Нажал "случайно" шифт после основной кнопки - сработала "с шифтом"... и вот, вместо выпуска шасси ты катапультируешься В случае SEQUENCE...WAIT...ENDSEQUENCE последовательность срабатывает один раз при появлении условия.... то, что надо! ...и, ещё... Terror, стало интересно "Электротриммирование" по всем осям: с сохранением полного диапазона отклонений, как на Ка-50: нажал кнопку -- ручка (и педали) запомнили, где они (центр смещается), при этом сохраняется полный диапазон отклонения (scaling оси). Коррекция электротриммирования РУСа и педалей по пипке на РУСе. Игровыми триммерами можно вообще после этого не пользоваться + появляются "триммера" там, где их нет (РН на мессе и проч.) + возможность мгновенно затриммировать вираж. Вылажи, пожалуйста, если найдешь время, с краткими коментами... Edited August 28, 2014 by =J13=Moroka Share this post Link to post Share on other sites
72AG_terror 115 Posted August 29, 2014 Безусловно, с IF...THEN...ELSE можно обрабатывать шифты... Но это будут неправильные пчелы шифты! Логика будет обрабатываться каждый проход ,хотя нам нужно только один раз, при нажатии хатки. Возможны ошибки: отпустил шифт раньше основной кнопки - сработала команда "без шифта" Нажал "случайно" шифт после основной кнопки - сработала "с шифтом"... и вот, вместо выпуска шасси ты катапультируешься В случае SEQUENCE...WAIT...ENDSEQUENCE последовательность срабатывает один раз при появлении условия.... то, что надо! Хм! Это интересно, может, я неправильно понимаю логику работы нашего скриптера: я так понимаю, что он обсчитывает все кнопки сразу до начала прохода. Грубо говоря, скрипт смотрит, какая кнопка нажата, не в момент if ... then, а ещё до script ... endscript. То есть кнопка весь скрипт или нажата, или нет и не может изменить своего статуса в процессе исполнения. Или же имеется ввиду ситуация: нажал Ctrl-Del, потом случайно нажал Alt? Электротрим постараюсь сегодня прислать. Share this post Link to post Share on other sites
=J13=Moroka 742 Posted August 29, 2014 (edited) Фиксированные значения на микростике 2 ...продолжаю работу над ошибками По прошествии некоторого времени с опубликования скрипта Фиксированные значения на микростике, при спокойном рассмотрении кода выяснилось, что и он содержит лишние строки! Теперь исправленный и упрощенный скрипт (в примере ось Y) выглядит так: // Title: Fix-MJoy 2 SCRIPT a1 = 2*(js1.a2-127); // Расчет для 1-й половина хода мкстика a2 = 2*js1.a2; // Расчет для 2-й половина хода мкстика IF ([a1 > cms.a1]) THEN cms.a1 = a1; ENDIF IF ([a2 < cms.a1]) THEN cms.a1 = a2; ENDIF ENDSCRIPT Для наблюдения результата отвяжите в GUI ось Y ProThottle (DX Device: None). А на её место "привяжите" cms.a1 ((DX Device: CM Device 1, DX Axis: Y Axis) Теперь, когда стало не страшно наращивать код, можно повесить на микростик дополнительно ещё 3 оси, добавив, например, к оси zoom (ось X) ещё смесь и радиаторы (ось Y), "зашифтовав" их по кнопкам b2...b4 // CMS Script File// Title: Multi Axis Fix-MJoySCRIPTa1 = 2*(js1.a2-127); // Расчет для 1-й половина хода по оси Ya2 = 2*js1.a2; // Расчет для 2-й половина хода по оси Ya3 = 2*(js1.a1-127); // -"- по оси Xa4 = 2*js1.a1; // -"- по оси X//IF (NOT(js1.b2 OR js1.b3 OR js1.b4)) THEN // Если ни одна из кнопок не нажатаIF ([a3 > cms.a1]) THEN // То управляем осью cms.a1cms.a1 = a3;ENDIFIF ([a4 < cms.a1]) THENcms.a1 = a4;ENDIFENDIFIF (js1.b2) THEN // Если нажата В2IF ([a1 > cms.a2]) THEN // То управляем осью cms.a2cms.a2 = a1;ENDIFIF ([a2 < cms.a2]) THENcms.a2 = a2;ENDIFENDIFIF (js1.b3) THEN // Если нажата В3IF ([a1 > cms.a3]) THEN // То управляем осью cms.a3cms.a3 = a1;ENDIFIF ([a2 < cms.a3]) THENcms.a3 = a2;ENDIFENDIFIF (js1.b4) THEN // Если нажата В4IF ([a1 > cms.a4]) THEN // То управляем осью cms.a4cms.a4 = a1;ENDIFIF ([a2 < cms.a4]) THENcms.a4 = a2;ENDIFENDIFENDSCRIPT Для наблюдения результата отвяжите в GUI оси X и Y у ProThottle (DX Device: None). А на для CMS "привяжите" cms.a1...cms.a4 к DX Device: CM Device 1, назначив для них оси DX Axis: X Axis, R Axis, U Axis, V Axis соответственно... или, чтобы не мучаться самим попробуйте конфигурацию из файла Multi_Axis_Fix_MJoy.arj Mult_Axis_Fix_MJoy.zip Edited August 29, 2014 by =J13=Moroka Share this post Link to post Share on other sites
[IB]Zulu 835 Posted August 29, 2014 Хм! Это интересно, может, я неправильно понимаю логику работы нашего скриптера: я так понимаю, что он обсчитывает все кнопки сразу до начала прохода. Грубо говоря, скрипт смотрит, какая кнопка нажата, не в момент if ... then, а ещё до script ... endscript. То есть кнопка весь скрипт или нажата, или нет и не может изменить своего статуса в процессе исполнения. Или же имеется ввиду ситуация: нажал Ctrl-Del, потом случайно нажал Alt? Ты правильно полагаешь. Текущий статус физ кнопок он смотрит еще до начала скрипта. Цикл работы следующий (из хелпа) 1) Опрашиваются все устройства и определяются статусы физических кнопок и осей 2) Производятся операции предусмотренные скриптом и формируются статусы и значения для осей и кнопок CMS 3) Статус осей и кнопок CMS передается в OS с учетом модификаций предусмотренных в GUI (посылаются коды клавиш, последовательностей, значений осей, движений мыши) 4) Снова переход на п. 1 - и так по кругу, бесконечно. Share this post Link to post Share on other sites
=19GvFAB=Metr 9 Posted August 29, 2014 Чего-то с продавцом с Ебея опять не получается связаться. Зато вот что нашёл: http://www.res-rich.com/chproducts_com/www.chproducts.com/shop/parts.html Только не ясно как заказать-то.. Share this post Link to post Share on other sites
[IB]Zulu 835 Posted August 29, 2014 (edited) Чего-то с продавцом с Ебея опять не получается связаться. Зато вот что нашёл: http://www.res-rich.com/chproducts_com/www.chproducts.com/shop/parts.html Только не ясно как заказать-то.. Я так понимаю писать, звонить сюда: Если это все не устарело. Хм... А ведь это копия странички старого CH магазина Хотя, видимо они специально и дали это маленькое окошко с контактной информацией поверх странички Напишешь сам? Или мне написать? Edited August 29, 2014 by [I.B.]Zulu Share this post Link to post Share on other sites
=19GvFAB=Metr 9 Posted August 29, 2014 (edited) Да,там в этом правом маленьком окне ссылка на китайский сайт с иероглифами Полазил там,резисторов не нашёл... ЗЫ: Вот эта фирма-производитель резисторов- http://www.ctscorp.com/default.htm ? Напишешь сам? Или мне написать? Напиши.Переведут на свои иероглифы переводчиком Edited August 29, 2014 by =DF=Metr Share this post Link to post Share on other sites
[IB]Zulu 835 Posted August 29, 2014 Я на английском напишу На нем то они без гугла работають Share this post Link to post Share on other sites
72AG_terror 115 Posted August 30, 2014 Вот так выглядит электротриммирование: // **************** // "Электротриммирование" действует следующим образом: когда мы отклоняем ручку и нажимаем кнопку триммирования, // скрипт запоминает положение ручки и считает это положение новым центром. Дальше все движения ручки происходят // от этого нового центра. Что это даёт: игра считает, что ручка постоянно отклонена на какую-то величину. // Таким образом мы добиваемся работы триммеров аналогично современным самолётам: триммируется не рулевая // поверхность, а тупо сдвигается ручка туда или сюда и удерживается в таком положении, а для лётчика это // становится новым "центром" ручки. // // Собственно триммирование осуществляется двумя способами: // 1. Достигаем нужного положения самолёта, зажимаем кнопку. Игра запомнила это положение. Возвращаем ручку в центр. // 2. Двигаем хатку, таким образом сдвигаем положение центра в нужную сторону (аналогично триммированию в игре). // То есть мы можем как быстро затриммировать нужное положение с кнопки, так и подкорректировать текущее положение с // хатки. // // Я использую кнопку под мизинец на Fighterstick и хатку-"пипку" на нём же. // // Кроме того, триммирование по всем осям можно сбросить, для этого жмём кнопку трима, удерживая Шифт // // ******************* // Зададим оси %DEFINE J_Stick_X JS2.A1 // Ось джойстика - Х (Fighterstick на второй вкладке, ось X) %DEFINE J_Stick_Y JS2.A2 // Ось джойстика - Y (Y) %DEFINE J_Pedals JS1.A3 // Ось колёсика на РУСе (CH ProPedals на первой вкладке) // Кнопка триммирования и ШИФТ %DEFINE SHIFT JS3.B2 // SHIFT -- кнопка-шифт %DEFINE J_Electrotrim_Button JS2.B4 // Кнопка "электротриммирования" (pinky -- кнопка под мизинец на РУС) // Хатка на Fighterstick, как кнюппель триммирования // Обратите внимание, что "диагональные" положения тоже учитываются, то есть, скажем, "влево-вверх" тоже можно... %DEFINE J_Electrotrim_Nose_Down ( JS2.B25 OR JS2.B26 OR JS2.B32 ) // Хатка РУС, она управляет электротриммированием. Нос вниз (хатка вверх) %DEFINE J_Electrotrim_Nose_Up ( JS2.B29 OR JS2.B28 OR JS2.B30 ) // Нос вверх %DEFINE J_Electrotrim_Bank_Left ( ( JS2.B31 OR JS2.B30 OR JS2.B32 ) AND NOT JS3.B2 ) // Крен влево (влево без шифта) %DEFINE J_Electrotrim_Bank_Right ( JS2.B27 OR JS2.B26 OR JS2.B28 ) AND NOT JS3.B2 ) // Крен вправо %DEFINE J_Electrotrim_Yaw_Left ( ( JS2.B31 OR JS2.B30 OR JS2.B32 ) AND JS3.B2 ) // Рысканье влево (влево с шифтом, предвидя вопрос: // нельзя использовать одну переменную в объявлении другой) %DEFINE J_Electrotrim_Yaw_Right ( ( JS2.B27 OR JS2.B26 OR JS2.B28 ) AND JS3.B2) // Рысканье вправо // Зададим внутренние переменные для вычислений %DEFINE A_Stick_X A1 // Расчитываемое положение РУС по крену, %DEFINE A_Stick_Y A2 // по тангажу. %DEFINE A_Rudder A3 // по РН // Наконец зададим выводимые оси %DEFINE C_Stick_X CMS.A1 // Крен %DEFINE C_Stick_Y CMS.A2 // Тангаж %DEFINE C_Rudder CMS.A3 // Руль направления // Поехали! script // Начнём с того, что узнаем и запомним физ. положения осей на момент прохода в промежуточные переменные. // if( NOT J_Electrotrim_Button ) then // Если сейчас кнопка эл. триммирования НЕ нажата // (при нажатии кнопки управление блокируется (не обсчитывается) до её отпускания, // чтобы значение триммирования не складывалось с положением РУС (бросок). // Именно поэтому и введены доп. переменные -- чтобы игнорировать движения // физ. оси до момента отпускания кнопки. Доп. переменные изменяются только, // если кнопка отпущена A_Stick_X = J_Stick_X ; // Ось крена (элероны) A_Stick_Y = J_Stick_Y ; // Ось тангажа (РВ) A_Rudder = J_Pedals ; // Ось рысканья (РН) // Теперь нужно добавить значения триммирования к исходным физ. положениям. // Когда мы "триммируемя", мы смещаем центр той или иной оси на Х кликов. Скажем, на 10 кликов. Получится так: // Пусть РУС в центре: 127 (физ. значение) + 10 (триммирование) = 137 (выводимое значение). // То есть для игры наша ручка будет отклонёна всё время вперёд, хотя на деле она стоит в центре. // Таким образом добиваемся триммирования. // Но! Тут возникает один неприятный момент: ход ручки у нас от 0 до 255, если мы сместим центр, скажем, на +10, со 127 на 137, // то диапазон выводимых значений будет [0-255] + 10 = от 10 до 265. И, так как значения больше max (255) приравниваются к 255, то // получится, что у нас диапазон выводимых в игру значений будет от 10 до 255, то есть мы теряем 10 кликов хода в одну сторону, // а в другу максимум оси будет достигнут до её физического максимума. // Это недопустимо для воздушного боя, поэтому необходимо внести коэффициенты для отклонений в обе стороны, чтобы // max-выводимый = max-физический и min-выводимый = 0. // // Добавляем значения триммирования к осям и устанавливаем выводимые оси в нужное положение. if( [ J_Stick_X <= 128 ] ) then // Если РУС дан влево, то нужно вычислить коэффициент. // Очень грубо: перевести в проценты отклонение ручки и умножить на длину вычисляемой оси. // Подробно про алгоритм -- смотрим в посте. C_Stick_X = 128 + A_Ailerons_Trim - ((( 128 - A_Stick_X ) * ( 128 + A_Ailerons_Trim )) / 128); else // вправо C_Stick_X = 128 + A_Ailerons_Trim + ((( A_Stick_X - 128 ) * (( 255 - 128 ) - A_Ailerons_Trim )) / 127); endif if( [ J_Stick_Y <= 128 ] ) then // Тангаж C_Stick_Y = 128 + A_Elevator_Trim - ((( 128 - A_Stick_Y ) * ( 128 + A_Elevator_Trim )) / 128); else C_Stick_Y = 128 + A_Elevator_Trim + ((( A_Stick_Y - 128 ) * (( 255 - 128 ) - A_Elevator_Trim )) / 127); endif if( [ A_Rudder <= 128 ] ) then // Рысканье C_Rudder = 128 + A_Rudder_Trim - ((( 128 - A_Rudder ) * ( 128 + A_Rudder_Trim )) / 128); else C_Rudder = 128 + A_Rudder_Trim + ((( A_Rudder - 128 ) * (( 255 - 128 ) - A_Rudder_Trim )) / 127); endif endif if ( SHIFT AND J_Electrotrim_Button ) then // Сброс триммеров A_Elevator_Trim = 0; // Сбрасываем эл. триммирование по всем осям A_Ailerons_Trim = 0; A_Rudder_Trim = 0; endif // ************************************************** // // ************************************************** // // ******* Обработка хатки эл. триммирования ******** // // // Хатка (пипка) на РУС. Действует очень примерно как кнюппель триммера на РУСе в современных самолётах: // отклоняем, допустим, нашу хатку вверх (типа "ручка от себя"), в реальном самолёте (и на джоях с отдаче) РУС начинает // сам двигаться вперёд, а нашем же случае(у нас нет отдачи) -- центр оси тангажа РУС начинает ползти "от себя". // // Применяем sequence, так как нужно использовать определённую задержку. Иначе ось перемещается слишком быстро -- очень неудобно. // sequence while ( J_Electrotrim_Nose_Down ); // Итак, удерживается кнопка "триммер - нос вниз" (от себя)... A_Elevator_Trim = A_Elevator_Trim - 1; // Если триммируется "нос вниз", то отнять 1 от текущего вычисляемого значения оси. if ([ A_Elevator_Trim < -127]) then // Однако если значение уже максимальное, то больше не увеличивать, // а то потом обратно выводить (кнопку держать) замучаешься // (ведь можно и до -65535 затриммироваться). A_Elevator_Trim = -127; endif delay( 1 ); // Чтобы триммирование происходило не слишком резко, чтобы можно было плавно подстроить, // даём задержку. Она подобрана экспериментально, к сожалению delay() не воспринимает переменные, // число (аргумент-величина задержки)приходится писать прямо в команде ("1" или другое). endsequence // Одну кнопку отработали // Остальные кнопки - аналогично // РН триммируется "влево-вправо" с шифтом (без шифта -- элероны) sequence while ( J_Electrotrim_Nose_Up ); A_Elevator_Trim = A_Elevator_Trim + 1; if ([ A_Elevator_Trim > 127]) then A_Elevator_Trim = 127; endif delay( 1 ); endsequence sequence while ( J_Electrotrim_Bank_Left ); // Крен A_Ailerons_Trim = A_Ailerons_Trim - 1; if ([ A_Ailerons_Trim < -127]) then A_Ailerons_Trim = -127; endif delay( 1 ); endsequence sequence while ( J_Electrotrim_Bank_Right ); A_Ailerons_Trim = A_Ailerons_Trim + 1; if ( [ A_Ailerons_Trim > 127 ] ) then A_Ailerons_Trim = 127; endif delay( 1 ); endsequence sequence while ( J_Electrotrim_Yaw_Left ); // Рысканье A_Rudder_Trim = A_Rudder_Trim - 1; if ( [ A_Rudder_Trim < -127 ] ) then A_Rudder_Trim = -127; endif delay( 1 ); endsequence sequence while ( J_Electrotrim_Yaw_Right ); A_Rudder_Trim = A_Rudder_Trim + 1; if ( [ A_Rudder_Trim > 127 ] ) then A_Rudder_Trim = 127; endif delay( 1 ); endsequence // ************************************************** // endscript // Усё! 1 Share this post Link to post Share on other sites
=J13=Moroka 742 Posted August 30, 2014 (edited) Спасибо! Утащил. (Хочу к бомберу приделать...) Спасибо, что "разжевал" подробно... но чувствую вопросы будут... Edited August 30, 2014 by =J13=Moroka Share this post Link to post Share on other sites
=2ndSS=JOCKER 2630 Posted August 31, 2014 Вот тут видно размеры части, которую надо выпилить: http://snomhf.exofire.net/fighterRunt.html А из нутри, усилял для надёжности ? Share this post Link to post Share on other sites
=J13=Moroka 742 Posted September 1, 2014 (edited) Вот так выглядит электротриммирование:... Ура! Все отлично работает. Terror спасибо... Так все грамотно задокументировано и откомментировано, что вопросов не возникло.... Для тех, кто захочет повторить поделюсь найденными описками... 1. в строке %DEFINE J_Electrotrim_Bank_Right ( ( JS2.B27 OR JS2.B26 OR JS2.B28 ) AND NOT JS3.B2 ) // Крен вправо поставить вторую скобку 2. в блоке ...... if( [ A_Rudder <= 128 ] ) then // Рысканье C_Rudder = 128 + A_Rudder_Trim - ((( 128 - A_Rudder ) * ( 128 + A_Rudder_Trim )) / 128); else C_Rudder = 128 + A_Rudder_Trim + ((( A_Rudder - 128 ) * (( 255 - 128 ) - A_Rudder_Trim )) / 127); endif else // А присвоить, то при нажатии A_Elevator_Trim = A_Stick_Y-128; A_Ailerons_Trim = A_Stick_X-128; A_Rudder_Trim = A_Rudder-128; endif Edited September 1, 2014 by =J13=Moroka Share this post Link to post Share on other sites