=19GvFAB=Metr Опубликовано: 12 августа 2014 Опубликовано: 12 августа 2014 Отличная тема,много примеров... Вот такой есть вопросик - где бы резисторами разжиться ихними? Может кто знает?Раньше в КомпТуРу были...
Tche Опубликовано: 12 августа 2014 Опубликовано: 12 августа 2014 У меня вопрос к освоившим программирование СН джентльменам. Каким образом вы определяете какая ось какого устройства соответствует определенному наименованию? %DEFINE J_Pedals JS1.A3 // Педали ( CH ProPedals, педали на первой вкладке ) вот как в цитате, почему педали не JS3.A1 например?У кота все оси поименованы и там невозможно их перепутать. А вот СН у меня возникли проблемы, не понимаю что откуда. Хотел разобраться подробнее с системой программирования СН и чего то много неочевидных вещей как-то.
NobbyNobbs Опубликовано: 12 августа 2014 Автор Опубликовано: 12 августа 2014 (изменено) вот как в цитате, почему педали не JS3.A1 например? У кота все оси поименованы и там невозможно их перепутать. А вот СН у меня возникли проблемы, не понимаю что откуда. Хотел разобраться подробнее с системой программирования СН и чего то много неочевидных вещей как-то. в принципе, в ГУЕ всегда видно ху есть кто. vs Изменено 12 августа 2014 пользователем NobbyNobbs 1
[IB]Zulu Опубликовано: 12 августа 2014 Опубликовано: 12 августа 2014 Отличная тема,много примеров... Вот такой есть вопросик - где бы резисторами разжиться ихними? Может кто знает?Раньше в КомпТуРу были... Раньше были, да.. Потому что у CH был собственный "магазин" запчастей к их джоям. Резюки, пружины, кнопули. Удивительно дело! Тока закрыли они его. Их джои и так по десятку лет служат игрокам, и если им еще и резюки в запчасти давать, то кому они новые продавать будут??? Ну это все лирика. Я недавно озадачился темой, хотел купить в запас (Комбатстику уже почти 6 лет наверное,). Ведь раньше то были! ОКазалось: Чичас нигде не купить. Даже на ебае. Резюки там военные ( CTS HP 100) с MIL допуском. 2 млн. циклов наработки на отказ!!!! (для сравнения, типовые потенциометры в бытовой радиоэлектронике и дешевых джоях имеют заявленную жизнь 15000 циклов ) Оригинальные карбоновые: Исходя из надежностных характеристик можно попробовать заменить такими (серия P30L - керамометалика). Форма другая, но шток похоже одинаковый. Брать нужно тип А (линейные)
72AG_terror Опубликовано: 12 августа 2014 Опубликовано: 12 августа 2014 Отличная тема,много примеров... Вот такой есть вопросик - где бы резисторами разжиться ихними? Может кто знает?Раньше в КомпТуРу были... Сейчас с ними -- беда. Самый простой вариант (за исключением аналогов) -- купить БУ ручку (на запчасти) на ebay.
[IB]Zulu Опубликовано: 12 августа 2014 Опубликовано: 12 августа 2014 (изменено) Угу, и самый классный БУ вариант, это наверное ТроттлКвадрант. Там резюков Аж 6, и износ будет минимальный, ведь не РУС. Тока бушных квадрантов очень мало предлагается, и цена вовсе не бросовая... Хотя... может просто долго не лежат? Изменено 12 августа 2014 пользователем [I.B.]Zulu
=19GvFAB=Metr Опубликовано: 12 августа 2014 Опубликовано: 12 августа 2014 (изменено) Может что-то в Чип-Дипе поискать? Комбатстику уже почти 6 лет наверное А я Файтерстик где-то в 2005-2006 брал если память не изменяет.Один раз резюки менял уже. В общем,написал в саппорт СН,посмотрим что ответят. Насчёт Квадранта идея хорошая !!! Изменено 12 августа 2014 пользователем =DF=Metr
72AG_terror Опубликовано: 12 августа 2014 Опубликовано: 12 августа 2014 (изменено) Угу, и самый классный БУ вариант, это наверное ТроттлКвадрант. Там резюков Аж 6, и износ будет минимальный, ведь не РУС. Тока бушных квадрантов очень мало предлагается, и цена вовсе не бросовая... Хотя... может просто долго не лежат? По слухам в квадранте они припаяны, их оттеда трудно выдрать. Хотя, очень трудно поверить в это. Изменено 12 августа 2014 пользователем 72AG_terror
[IB]Zulu Опубликовано: 12 августа 2014 Опубликовано: 12 августа 2014 (изменено) Ну да, которые на рычагах (т.е. HP100). Ножками впаяны. Верно. Но пяльник и шинка для впитывания припоя тебе в помощь. Смотри тут: Изменено 12 августа 2014 пользователем [I.B.]Zulu
=19GvFAB=Metr Опубликовано: 15 августа 2014 Опубликовано: 15 августа 2014 (изменено) Вот нашёл кой чего:http://www.ebay.com/itm/CTS-100k-Ohm-Rotary-Potentiometer-295-S1064-Qty-3-/221168438352?pt=LH_DefaultDomain_0&hash=item337eaa8c50#ht_1389wt_1363 Похожи? ЗЫ Надеюсь,не будет рекламой... Изменено 15 августа 2014 пользователем =DF=Metr
[IB]Zulu Опубликовано: 15 августа 2014 Опубликовано: 15 августа 2014 (изменено) Вот нашёл кой чего: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 шт. в руки. Если будешь брать, возьми и мне два комплекта, что бы хоть не оплачивать несколько раз пересылку копеечных бандеролек. Деньги сразу тебе вышлю. Цену доставки досюда можешь делить пополам Изменено 15 августа 2014 пользователем [I.B.]Zulu
=19GvFAB=Metr Опубликовано: 15 августа 2014 Опубликовано: 15 августа 2014 Чего-то не получается связаться с продавцом.Надо узнать,сколько стоит пересылка.
[IB]Zulu Опубликовано: 15 августа 2014 Опубликовано: 15 августа 2014 Может, еще не проснулись? Часовой пояс. Ведь Америка ж
[IB]Zulu Опубликовано: 15 августа 2014 Опубликовано: 15 августа 2014 Хе, а ты сюда смотрел: http://www.project-parts.com/itempix/530-014B.jpg - резьбы нет! Но это правда фигня, можно верхнюю крышку от исходного поставить ( с резьбой). Просто меня стали терзать смутные сомнения, что же это за резюки такие, и откуда они взялись в таком количестве, по такой смешной цене, и без резьбы.
=19GvFAB=Metr Опубликовано: 19 августа 2014 Опубликовано: 19 августа 2014 "Этот продавец будет отсутствовать до 29.08.2014 и в данный момент не может обработать заказ. Вы можете добавить этот товар в список отслеживания и купить его позже." Вот наверное почему не получается связаться.Кстати,саппорт СН тоже молчит.
[IB]Zulu Опубликовано: 20 августа 2014 Опубликовано: 20 августа 2014 (изменено) "Этот продавец будет отсутствовать до 29.08.2014 и в данный момент не может обработать заказ. Вы можете добавить этот товар в список отслеживания и купить его позже." Вот наверное почему не получается связаться.Кстати,саппорт СН тоже молчит. Пожалуй, что так. Кстати - в Throttle Quadrant именно такие, без резьбы оказывается. Они там за ножки в плату впаяны. Так что, ждем 29-го Изменено 20 августа 2014 пользователем [I.B.]Zulu
=19GvFAB=Metr Опубликовано: 20 августа 2014 Опубликовано: 20 августа 2014 Вообще,когда менял их в файтерстике резьбы там не помню.Они вставляются в отверстия.Разберу-посмотрю.
[IB]Zulu Опубликовано: 20 августа 2014 Опубликовано: 20 августа 2014 В педалях точно с резьбой. Самолично подтягивал Да и тут в общем то резьба изображена. Видимо есть варианты.
=19GvFAB=Metr Опубликовано: 25 августа 2014 Опубликовано: 25 августа 2014 Здравствуйте, Я сожалею, но мы не продаем частей части. Джон Soucy Технический Представитель APEM, Inc. 970 Park Center Drive Vista, CA 92081 Офис: (760) 598-2518 ответ от CH Products на мой вопрос по поводу резисторов.Жаль. Разбирал Файтерстик,резьбы нету.Просто вставляются в отверстия они.
[IB]Zulu Опубликовано: 25 августа 2014 Опубликовано: 25 августа 2014 Разбирал Файтерстик,резьбы нету.Просто вставляются в отверстия они. Ок. Отлично. Значит надо заказывать!
beretta5 Опубликовано: 26 августа 2014 Опубликовано: 26 августа 2014 (изменено) Братья пацаки тупой вопрос но всё таки.Один скрипт я сделал,он работает.А как сделать другой скрипт?Как открыть новую вкладку в CM editor? Изменено 26 августа 2014 пользователем beretta5
Maxyman Опубликовано: 27 августа 2014 Опубликовано: 27 августа 2014 Всю логику можно реальзовать в одном скрипте. Как я понимаю каждой конфигурации (map файл), может соответсвовать один скрипт файл. Т.е. возможности открыть еще одну вкладку нет. CH Control Manager штука, конечно, архаичная, но дело свое делает на отлично.
=19GvFAB=Metr Опубликовано: 27 августа 2014 Опубликовано: 27 августа 2014 День добрый! К сожалению, сейчас резисторов нет в наличии. Мы попробуем уточнить у производителя возможность отгрузки резисторов, но поставка может растянуться на пару месяцев. С уважением, Светлана Шахова www.comp2.ru Ответили из комптуру.
[IB]Zulu Опубликовано: 27 августа 2014 Опубликовано: 27 августа 2014 Прикол, думаю они спросят там же где и ты И получат тот же ответ ИМХО, надо ждать 29-го, когда возобновит поставку "отпускник" с ebay
=59=Moroka Опубликовано: 28 августа 2014 Опубликовано: 28 августа 2014 (изменено) Ещё немного о программировании "правильных" 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 Изменено 28 августа 2014 пользователем =J13=Moroka 1
=59=Moroka Опубликовано: 28 августа 2014 Опубликовано: 28 августа 2014 (изменено) ...Вы будете смеяться, но случайно обнаружил, что эти алгоритмы можно ещё упростить Последняя проверка а-ля "Все кнопки отпустили" не нужна! т.е. общая картина выглядит так: 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 Изменено 28 августа 2014 пользователем =J13=Moroka 1
72AG_terror Опубликовано: 28 августа 2014 Опубликовано: 28 августа 2014 (изменено) Не понял, только, зачем делать отдельный SEQUENCE, когда узнать, в каком кнопка положении нужно только один раз за проход. Не проще ли так: %DEFINE Shift JS1.B4 script if ( Shift ) .... else .... endif endscript sequence, по-мне, так нужен только тогда, когда нужно обсчитывать что-то непрерывно изменяющееся, например движение оси с кнопки (пока нажато, то....), но при этом нужна специфическая задержка, а основноый скрипт задерживать нельзя. Например ось с кнопки в основной последовательности двигается слишком быстро, нужна задержка. Или, например, мигание АНО со скоростью 10 раз в секунду... ... нужна задержка. Или, например, удержание кнопки определённое время (полный выход закрылок на ЛаГГе -- около 10 секунд). В остальных случаях, когда надо просто отследить, нажато ли то, или это, в данном конкретном проходе, совершенно не нужен sequence. Более того, на sequence наложен ряд ограничений, например он не может находится в блоке if...endif, его сложнее отлаживать и проч. Изменено 28 августа 2014 пользователем 72AG_terror 1
=59=Moroka Опубликовано: 28 августа 2014 Опубликовано: 28 августа 2014 (изменено) Не понял, только, зачем делать отдельный SEQUENCE, когда узнать, в каком кнопка положении нужно только один раз за проход. Не проще ли так: ...В остальных случаях, когда надо просто отследить, нажато ли то, или это, в данном конкретном проходе, совершенно не нужен sequence... Безусловно, с IF...THEN...ELSE можно обрабатывать шифты... Но это будут неправильные пчелы шифты! Логика будет обрабатываться каждый проход ,хотя нам нужно только один раз, при нажатии хатки. Возможны ошибки: отпустил шифт раньше основной кнопки - сработала команда "без шифта" Нажал "случайно" шифт после основной кнопки - сработала "с шифтом"... и вот, вместо выпуска шасси ты катапультируешься В случае SEQUENCE...WAIT...ENDSEQUENCE последовательность срабатывает один раз при появлении условия.... то, что надо! ...и, ещё... Terror, стало интересно "Электротриммирование" по всем осям: с сохранением полного диапазона отклонений, как на Ка-50: нажал кнопку -- ручка (и педали) запомнили, где они (центр смещается), при этом сохраняется полный диапазон отклонения (scaling оси). Коррекция электротриммирования РУСа и педалей по пипке на РУСе. Игровыми триммерами можно вообще после этого не пользоваться + появляются "триммера" там, где их нет (РН на мессе и проч.) + возможность мгновенно затриммировать вираж. Вылажи, пожалуйста, если найдешь время, с краткими коментами... Изменено 28 августа 2014 пользователем =J13=Moroka
72AG_terror Опубликовано: 29 августа 2014 Опубликовано: 29 августа 2014 Безусловно, с IF...THEN...ELSE можно обрабатывать шифты... Но это будут неправильные пчелы шифты! Логика будет обрабатываться каждый проход ,хотя нам нужно только один раз, при нажатии хатки. Возможны ошибки: отпустил шифт раньше основной кнопки - сработала команда "без шифта" Нажал "случайно" шифт после основной кнопки - сработала "с шифтом"... и вот, вместо выпуска шасси ты катапультируешься В случае SEQUENCE...WAIT...ENDSEQUENCE последовательность срабатывает один раз при появлении условия.... то, что надо! Хм! Это интересно, может, я неправильно понимаю логику работы нашего скриптера: я так понимаю, что он обсчитывает все кнопки сразу до начала прохода. Грубо говоря, скрипт смотрит, какая кнопка нажата, не в момент if ... then, а ещё до script ... endscript. То есть кнопка весь скрипт или нажата, или нет и не может изменить своего статуса в процессе исполнения. Или же имеется ввиду ситуация: нажал Ctrl-Del, потом случайно нажал Alt? Электротрим постараюсь сегодня прислать.
=59=Moroka Опубликовано: 29 августа 2014 Опубликовано: 29 августа 2014 (изменено) Фиксированные значения на микростике 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 Изменено 29 августа 2014 пользователем =J13=Moroka
[IB]Zulu Опубликовано: 29 августа 2014 Опубликовано: 29 августа 2014 Хм! Это интересно, может, я неправильно понимаю логику работы нашего скриптера: я так понимаю, что он обсчитывает все кнопки сразу до начала прохода. Грубо говоря, скрипт смотрит, какая кнопка нажата, не в момент if ... then, а ещё до script ... endscript. То есть кнопка весь скрипт или нажата, или нет и не может изменить своего статуса в процессе исполнения. Или же имеется ввиду ситуация: нажал Ctrl-Del, потом случайно нажал Alt? Ты правильно полагаешь. Текущий статус физ кнопок он смотрит еще до начала скрипта. Цикл работы следующий (из хелпа) 1) Опрашиваются все устройства и определяются статусы физических кнопок и осей 2) Производятся операции предусмотренные скриптом и формируются статусы и значения для осей и кнопок CMS 3) Статус осей и кнопок CMS передается в OS с учетом модификаций предусмотренных в GUI (посылаются коды клавиш, последовательностей, значений осей, движений мыши) 4) Снова переход на п. 1 - и так по кругу, бесконечно.
=19GvFAB=Metr Опубликовано: 29 августа 2014 Опубликовано: 29 августа 2014 Чего-то с продавцом с Ебея опять не получается связаться. Зато вот что нашёл: http://www.res-rich.com/chproducts_com/www.chproducts.com/shop/parts.html Только не ясно как заказать-то..
[IB]Zulu Опубликовано: 29 августа 2014 Опубликовано: 29 августа 2014 (изменено) Чего-то с продавцом с Ебея опять не получается связаться. Зато вот что нашёл: http://www.res-rich.com/chproducts_com/www.chproducts.com/shop/parts.html Только не ясно как заказать-то.. Я так понимаю писать, звонить сюда: Если это все не устарело. Хм... А ведь это копия странички старого CH магазина Хотя, видимо они специально и дали это маленькое окошко с контактной информацией поверх странички Напишешь сам? Или мне написать? Изменено 29 августа 2014 пользователем [I.B.]Zulu
=19GvFAB=Metr Опубликовано: 29 августа 2014 Опубликовано: 29 августа 2014 (изменено) Да,там в этом правом маленьком окне ссылка на китайский сайт с иероглифами Полазил там,резисторов не нашёл... ЗЫ: Вот эта фирма-производитель резисторов- http://www.ctscorp.com/default.htm ? Напишешь сам? Или мне написать? Напиши.Переведут на свои иероглифы переводчиком Изменено 29 августа 2014 пользователем =DF=Metr
[IB]Zulu Опубликовано: 29 августа 2014 Опубликовано: 29 августа 2014 Я на английском напишу На нем то они без гугла работають
72AG_terror Опубликовано: 30 августа 2014 Опубликовано: 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
=59=Moroka Опубликовано: 30 августа 2014 Опубликовано: 30 августа 2014 (изменено) Спасибо! Утащил. (Хочу к бомберу приделать...) Спасибо, что "разжевал" подробно... но чувствую вопросы будут... Изменено 30 августа 2014 пользователем =J13=Moroka
=2ndSS=JOCKER Опубликовано: 31 августа 2014 Опубликовано: 31 августа 2014 Вот тут видно размеры части, которую надо выпилить: http://snomhf.exofire.net/fighterRunt.html А из нутри, усилял для надёжности ?
=59=Moroka Опубликовано: 1 сентября 2014 Опубликовано: 1 сентября 2014 (изменено) Вот так выглядит электротриммирование:... Ура! Все отлично работает. 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 Изменено 1 сентября 2014 пользователем =J13=Moroka
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас