beretta5 Опубликовано: 30 сентября 2014 Опубликовано: 30 сентября 2014 Прикрепи скрипт. Я тебе интегрирую. Вот я сделал шумоподавитель для тангажа X_Stick,крена Y_Stick,рысканя J_Stick. %Define X_Stick JS1.a1 %Define A_Stick cms.a1 %Define az 5 %Define Y_Stick JS1.a2 %Define B_Stick cms.a2 %Define bz 6 %Define J_Stick JS3.a3 %Define C_Stick CMS.a3 %Define cz 6 script if ( [ X_Stick > A_Stick+(az-1) ] ) then A_Stick = X_Stick - az; endif if ( [ X_Stick < A_Stick-(az-1) ] ) then A_Stick = X_Stick + az; endif if ( [ X_Stick == 255 ] ) then A_Stick = 255; endif if ( [ X_Stick == 0 ] ) then A_Stick = 0; endif if ( [ Y_Stick > B_Stick+(bz-1) ] ) then B_Stick = Y_Stick - bz; endif if ( [ Y_Stick < B_Stick-(bz-1) ] ) then B_Stick = Y_Stick + bz; endif if ( [ Y_Stick == 255 ] ) then B_Stick = 255; endif if ( [ Y_Stick == 0 ] ) then B_Stick = 0; endif if ( [ J_Stick > C_Stick+(cz-1) ] ) then C_Stick = J_Stick - cz; endif if ( [ J_Stick < C_Stick-(cz-1) ] ) then C_Stick = J_Stick + cz; endif if ( [ J_Stick == 255 ] ) then C_Stick = 255; endif if ( [ J_Stick == 0 ] ) then C_Stick = 0; endif Нужно прикрутить электротриммирование к крену(к другим осям не нужно или я потом сам сделаю на основе скрипта для крена)
NobbyNobbs Опубликовано: 30 сентября 2014 Автор Опубликовано: 30 сентября 2014 ИМХО вешать нойзгейт, работающий по такому принципу на оси крена/тангажа/рысканья не самая лучшая идея. Это добровольный люфт.
beretta5 Опубликовано: 30 сентября 2014 Опубликовано: 30 сентября 2014 (изменено) ИМХО вешать нойзгейт, работающий по такому принципу на оси крена/тангажа/рысканья не самая лучшая идея. Это добровольный люфт. Ну других шумоподавителей пока нет.Недостаток этого скрипта в том что кружок не возвращается точно в центр.Но я выставил мёртвую зону в 2 единицы. Изменено 30 сентября 2014 пользователем beretta5
beretta5 Опубликовано: 30 сентября 2014 Опубликовано: 30 сентября 2014 Я его модернизировал теперь нет люфта,индикатор в центр возвращается %Define X_Stick JS1.a1%Define A_Stick cms.a1%Define az 5%Define Y_Stick JS1.a2%Define B_Stick cms.a2%Define bz 6%Define J_Stick JS3.a3%Define C_Stick CMS.a3%Define cz 6scriptif ( [ X_Stick > A_Stick+(az-1) ] ) thenA_Stick = X_Stick - az;endifif ( [ X_Stick < A_Stick-(az-1) ] ) thenA_Stick = X_Stick + az;endifif ( [ X_Stick == 255 ] ) thenA_Stick = 255;endifif ( [ X_Stick == 0 ] ) thenA_Stick = 0;endifif ( [ X_Stick == 128 ] ) thenA_Stick = 128;endifif ( [ Y_Stick > B_Stick+(bz-1) ] ) thenB_Stick = Y_Stick - bz;endifif ( [ Y_Stick < B_Stick-(bz-1) ] ) thenB_Stick = Y_Stick + bz;endifif ( [ Y_Stick == 255 ] ) thenB_Stick = 255;endifif ( [ Y_Stick == 0 ] ) thenB_Stick = 0;endifif ( [ Y_Stick == 128 ] ) thenB_Stick = 128;endifif ( [ J_Stick > C_Stick+(cz-1) ] ) thenC_Stick = J_Stick - cz;endifif ( [ J_Stick < C_Stick-(cz-1) ] ) thenC_Stick = J_Stick + cz;endifif ( [ J_Stick == 255 ] ) thenC_Stick = 255;endifif ( [ J_Stick == 0 ] ) thenC_Stick = 0;endifif ( [ J_Stick == 128 ] ) thenC_Stick = 128;endif endscript
NobbyNobbs Опубликовано: 30 сентября 2014 Автор Опубликовано: 30 сентября 2014 (изменено) Я его модернизировал теперь нет люфта,индикатор в центр возвращается %Define X_Stick JS1.a1 %Define A_Stick cms.a1 %Define az 5 %Define Y_Stick JS1.a2 %Define B_Stick cms.a2 %Define bz 6 %Define J_Stick JS3.a3 %Define C_Stick CMS.a3 %Define cz 6 script if ( [ X_Stick > A_Stick+(az-1) ] ) then A_Stick = X_Stick - az; endif if ( [ X_Stick < A_Stick-(az-1) ] ) then A_Stick = X_Stick + az; endif if ( [ X_Stick == 255 ] ) then A_Stick = 255; endif if ( [ X_Stick == 0 ] ) then A_Stick = 0; endif if ( [ X_Stick == 128 ] ) then A_Stick = 128; endif if ( [ Y_Stick > B_Stick+(bz-1) ] ) then B_Stick = Y_Stick - bz; endif if ( [ Y_Stick < B_Stick-(bz-1) ] ) then B_Stick = Y_Stick + bz; endif if ( [ Y_Stick == 255 ] ) then B_Stick = 255; endif if ( [ Y_Stick == 0 ] ) then B_Stick = 0; endif if ( [ Y_Stick == 128 ] ) then B_Stick = 128; endif if ( [ J_Stick > C_Stick+(cz-1) ] ) then C_Stick = J_Stick - cz; endif if ( [ J_Stick < C_Stick-(cz-1) ] ) then C_Stick = J_Stick + cz; endif if ( [ J_Stick == 255 ] ) then C_Stick = 255; endif if ( [ J_Stick == 0 ] ) then C_Stick = 0; endif if ( [ J_Stick == 128 ] ) then C_Stick = 128; endif endscript Дело в том, что люфт не в центре, люфт везде. Так устроен этот алгоритм. Записал маленький ролик, в котором показан результат действия скрипта. На оси Z нет "сглаживания", рядом та же ось, но уже со "сглаживанием". Мертвая зона для наглядности выставлена 10, но и при меньших значениях картина в принципе будет такой же. Мне кажется, что с таким РУСом летать не получится. Изменено 30 сентября 2014 пользователем NobbyNobbs
72AG_terror Опубликовано: 1 октября 2014 Опубликовано: 1 октября 2014 Вот я сделал шумоподавитель для тангажа X_Stick,крена Y_Stick,рысканя J_Stick..... Нужно прикрутить электротриммирование к крену(к другим осям не нужно или я потом сам сделаю на основе скрипта для крена) Добавил к твоему скрипту триммирование по элеронам. Триммирование от хатки (пипки) влево-вправо. Наслаждайся. %Define X_Stick JS1.a1 %Define X_Stick_for_az a1 %Define Trim a2 %Define A_Stick cms.a1 %Define az 5 %Define Trim_vlevo JS1.B31 %Define Trim_vpravo JS1.B27 %Define Y_Stick JS1.a2 %Define B_Stick cms.a2 %Define bz 6 %Define J_Stick JS3.a3 %Define C_Stick CMS.a3 %Define cz 6 script if ( [ X_Stick > X_Stick_for_az+(az-1) ] ) then X_Stick_for_az = X_Stick - az; endif if ( [ X_Stick < X_Stick_for_az-(az-1) ] ) then X_Stick_for_az = X_Stick + az; endif if ( [ X_Stick == 255 ] ) then X_Stick_for_az = 255; endif if ( [ X_Stick == 0 ] ) then X_Stick_for_az = 0; endif if ( [ X_Stick_for_az <= 128 ] ) then A_Stick = 128 + Trim - ((( 128 - X_Stick_for_az ) * ( 128 + Trim )) / 128); else A_Stick = 128 + Trim + ((( X_Stick_for_az - 128 ) * (( 255 - 128 ) - Trim )) / 127); endif sequence while ( Trim_vlevo ) Trim = Trim - 1; if ( [ Trim < -127 ] ) then Trim = -127; endif delay(2); endsequence sequence while ( Trim_vpravo ) Trim = Trim + 1; if ( [ Trim > 127 ] ) then Trim = 127; endif delay(2); endsequence if ( [ Y_Stick > B_Stick+(bz-1) ] ) then B_Stick = Y_Stick - bz; endif if ( [ Y_Stick < B_Stick-(bz-1) ] ) then B_Stick = Y_Stick + bz; endif if ( [ Y_Stick == 255 ] ) then B_Stick = 255; endif if ( [ Y_Stick == 0 ] ) then B_Stick = 0; endif if ( [ J_Stick > C_Stick+(cz-1) ] ) then C_Stick = J_Stick - cz; endif if ( [ J_Stick < C_Stick-(cz-1) ] ) then C_Stick = J_Stick + cz; endif if ( [ J_Stick == 255 ] ) then C_Stick = 255; endif if ( [ J_Stick == 0 ] ) then C_Stick = 0; endif endscript 2
=59=Moroka Опубликовано: 2 октября 2014 Опубликовано: 2 октября 2014 (изменено) Дело в том, что люфт не в центре, люфт везде. Так устроен этот алгоритм... Мне кажется, что с таким РУСом летать не получится. Beretta5 будет за люфтваффе летать ... Изменено 2 октября 2014 пользователем =J13=Moroka 1
beretta5 Опубликовано: 2 октября 2014 Опубликовано: 2 октября 2014 Beretta5 будет за люфтваффе летать ... Не врубаюсь я про какой люфт он там говорит Я пока не воевал,просто полетал,фигуры там покрутил и никакого люфта не обнаружил.По крайней мере в управление самолётом разницы я не почувствовал.Мёртвые зоны на всех осях-6.
beretta5 Опубликовано: 2 октября 2014 Опубликовано: 2 октября 2014 (изменено) Добавил к твоему скрипту триммирование по элеронам. Триммирование от хатки (пипки) влево-вправо. Наслаждайся. Насладиться пока не получилось вот часть скрипта для оси крена.Центр оси с ним встаёт вправо на 228 единиц,триммирование не работает.Может я чё та не так сделал %Define X_Stick JS1.a1 %Define X_Stick_for_az a1 %Define Trim a2 %Define A_Stick cms.a1 %Define az 6 %Define Trim_vlevo JS1.B12 and js1.b4 %Define Trim_vpravo JS1.B10 and js1.b4 script if ( [ X_Stick > X_Stick_for_az+(az-1) ] ) then X_Stick_for_az = X_Stick - az; endif if ( [ X_Stick < X_Stick_for_az-(az-1) ] ) then X_Stick_for_az = X_Stick + az; endif if ( [ X_Stick == 255 ] ) then X_Stick_for_az = 255; endif if ( [ X_Stick == 0 ] ) then X_Stick_for_az = 0; endif if ( [ X_Stick == 128 ] ) then X_Stick_for_az = 128; endif if ( [ X_Stick_for_az <= 128 ] ) then A_Stick = 128 + Trim - ((( 128 - X_Stick_for_az ) * ( 128 + Trim )) / 128); else A_Stick = 128 + Trim + ((( X_Stick_for_az - 128 ) * (( 255 - 128 ) - Trim )) / 127); endif sequence while ( Trim_vlevo ); Trim = Trim - 1; if ( [ Trim < -127 ] ) then Trim = -127; endif delay(2); endsequence sequence while ( Trim_vpravo ); Trim = Trim + 1; if ( [ Trim > 127 ] ) then Trim = 127; endif delay(2); endsequence endscript Изменено 2 октября 2014 пользователем beretta5
beretta5 Опубликовано: 2 октября 2014 Опубликовано: 2 октября 2014 Я тут подумал Может стоит интегрировать скрипт триммирования на основе скрипта подруливания,мне удалось совместить его с "шумоподавителем". Нужно переделать блок,который возвращает шарик в центр,после того как отпускаешь кнопку хатки.К примеру,нажал кнопку-шарик сместился чуть в сторону на определённую величину.И сделать блок,который при нажатии выбранной кнопки ставит триммер в 0.
72AG_terror Опубликовано: 2 октября 2014 Опубликовано: 2 октября 2014 Насладиться пока не получилось вот часть скрипта для оси крена.Центр оси с ним встаёт вправо на 228 единиц,триммирование не работает.Может я чё та не так сделал Проверил, работает. Давай разбираться. Прикладываю тестовую карту (на ней только крен и работает). Я тут подумал Может стоит интегрировать скрипт триммирования на основе скрипта подруливания,мне удалось совместить его с "шумоподавителем". Нужно переделать блок,который возвращает шарик в центр,после того как отпускаешь кнопку хатки.К примеру,нажал кнопку-шарик сместился чуть в сторону на определённую величину.И сделать блок,который при нажатии выбранной кнопки ставит триммер в 0. В этом случае у тебя не будет полного диапазона. И будет косяк с временем реакции джоя. Долго объяснять, но подруливание несколько по другому организовано, давай забодаем триммирование, лучше. trim_ailerons.zip
beretta5 Опубликовано: 2 октября 2014 Опубликовано: 2 октября 2014 (изменено) Проверил, работает. Давай разбираться. Прикладываю тестовую карту (на ней только крен и работает). В этом случае у тебя не будет полного диапазона. И будет косяк с временем реакции джоя. Долго объяснять, но подруливание несколько по другому организовано, давай забодаем триммирование, лучше. В тестовой карте шарик в центре но триммер не работает Стоп,заработало когда выставил DX Device-none и DX Axis-none А как триммер сбрасывать в 0? Изменено 2 октября 2014 пользователем beretta5
beretta5 Опубликовано: 2 октября 2014 Опубликовано: 2 октября 2014 (изменено) Я кажется понял в чём дело У нас в скрипте есть %Define Trim a2. У меня в скрипте лимитатора оборотов есть ось а2 из за неё,похоже,шарик и смещается вправо в позицию 228.Вот этот скрипт лимитатор оборотов IF ([CURRENTMODE EQ 0]) THENif([a8==0])thena2=100;elseif([a8==1])thena2=150;elseif([a8==2])thena2=205;elsea2=255;endifendifendifcms.a8=(a2*js2.a3)/255+(255-a2);sequencewait((js2.b16)and[a8<3]);a8=a8+1;endsequencesequencewait((js2.b14)and[a8>0]);a8=a8-1;endsequence Изменено 2 октября 2014 пользователем beretta5
beretta5 Опубликовано: 2 октября 2014 Опубликовано: 2 октября 2014 Да,щёрт побери сделал так %Define Trim a4.А2 поменял на А4 и всё заработало.Только нужен возврат триммера в 0 при нажатии кнопки.
NobbyNobbs Опубликовано: 2 октября 2014 Автор Опубликовано: 2 октября 2014 Только нужен возврат триммера в 0 при нажатии кнопки. это просто мысли вслух или вопрос такой? до слова скрипт написать: %define ResetTrim js2.b__ //вместо __ подставить номер нужной кнопки после слова скрипт: if (ResetTrim) then trim=0; endif
beretta5 Опубликовано: 3 октября 2014 Опубликовано: 3 октября 2014 это просто мысли вслух или вопрос такой? до слова скрипт написать: %define ResetTrim js2.b__ //вместо __ подставить номер нужной кнопки после слова скрипт: if (ResetTrim) then trim=0; endif Шпасиба Повоевал маленко,воздействия люфтов не обнаружил
[IB]Zulu Опубликовано: 3 октября 2014 Опубликовано: 3 октября 2014 (изменено) Мужики, а вы точно друг друга понимаете??? Люфт - это свободный ход. (люфт - от немецкого, воздух, пространство) Применительно к джойстику, это свободное небольшое механическое болтание ручки, которое не вызывает электрического перемещения контактов в потенциометре (и не отражается на экране монитора). Люфт - он всегда МЕХАНИЧЕСКИЙ. А вот дрожжание, это наоборот, когда при жестко зафиксированной ручке происходят хаотичные и небольшие изменения электрической проводимости, они то и вызывают непостояноство показаний на экране монитора (они вызваны как правило износом проводящей поверхности потенциометра в месте контакта бегунка). Изменено 3 октября 2014 пользователем [I.B.]Zulu
NobbyNobbs Опубликовано: 3 октября 2014 Автор Опубликовано: 3 октября 2014 Люфт - он всегда МЕХАНИЧЕСКИЙ. А я ведь даже видео присобачил За счет скрипта получается самый натуральный люфт, механический. Просто внимательно посмотри, что делает этот скрипт, а потом для наглядности видео, которое я прикрепил выше. Из за используемой в скрипте скользящей мертвой зоны происходит следующее: виртуальная ось при выполнении одного из условий, начинает ползти точно за аналоговой c отставанием равному deadzone и все прекрасно вплоть до того момента, когда мы начнем двигать ручку в обратную сторону. Тогда на интервале 2*deadzone+1 меняется только значение аналоговой оси, никак не влияя на виртуальную. Ручка двигается, ось нет. Люфт это или не люфт? Для пущей наглядности сделал небольшой расчетик в либреофисе. Картинку прикрепляю. if ( [ AnalogAxis > VirtualAxis+(dz-1) ] ) then VirtualAxis = AnalogAxis - dz; endif if ( [ AnalogAxis < VirtualAxis-(dz-1) ] ) then VirtualAxis = AnalogAxis + dz; endif
beretta5 Опубликовано: 5 октября 2014 Опубликовано: 5 октября 2014 Zulu' timestamp='1412374347' post='208456'] Мужики, а вы точно друг друга понимаете??? Он имеет в виду рассинхронизацию осей Мне лично она летать не мешает,видимо потому что она мизерная.У меня то мёртвая зона в два раза меньше,к тому же надо смотреть всё это дело в игре а не в GUI.У меня рули ходят за ручкой без проблем.А вот эффект от "шумоподавления" я сразу заметил.Теперь я могу ровно вести машину по полосе при разгоне.Раньше мну колбасило из стороны в сторону из-за шума резистора.
=59=Moroka Опубликовано: 5 октября 2014 Опубликовано: 5 октября 2014 (изменено) Простой и малость читерский скрипт автотриммирования... Его основное достоинство - он очень маленький и экономит кнопки Теперь для 2-х (...и даже 3-х!, при использовании педалей от CH) осей их достаточно всего... одна! Именно при её нажатии будет "разрешаться" триммирование в сторону... в которую отклонен в данный момент РУС. От ранее опубликованных отличается тем, что управляет триммерами из игры, а не подменяет их "смещением" РУСа ...а если задать для cms.b1...cms.b4 не DX Mode, а клавиатурные комбинации, то переназначений управления в настройках не потребуется... Использовать короткими нажатиями... // AutoTrim_on_Stick Script cms.b1 = js1.b2 and [js1.a1 < 127]; // cms.b1 - трим нос вверх cms.b2 = js1.b2 and [js1.a1 > 128]; // cms.b2 - трим нос вниз cms.b3 = js1.b2 and [js1.a2 < 127]; // cms.b3 - трим крен влево cms.b4 = js1.b2 and [js1.a2 > 128]; // cms.b4 - трим крен вправо endScript ...и если темп регулировки триммеров в игре вам кажется слишком большим, то можно замедлить их работу имитацией коротких нажатий (спасибо Zulu за популяризацию использования всяких разных таймеров) //Autotrim_on_Stick_with_timer script Timer(interval,d1,4,5) = js1.b2 or d1;// 4-"время нажатия" 5- интервал между нажатиями. Подбирите значения под себя... cms.b1 = [js1.a1 < 127] and d1; cms.b2 = [js1.a1 > 128] and d1; cms.b3 = [js1.a2 < 127] and d1; cms.b4 = [js1.a2 > 128] and d1; endScript ...обратите внимание на строчку Timer(interval,d1,4,5) = js1.b2 or d1; где d1 используется и в качестве "результата" и в качестве "аргумента". Благодаря этому после отпускания кнопки триммирования (js1.b2), cms.b1... cms.b4 не "залипают", а всегда сбрасываются в 0 Изменено 5 октября 2014 пользователем =J13=Moroka 1
NobbyNobbs Опубликовано: 5 октября 2014 Автор Опубликовано: 5 октября 2014 (изменено) Простой и малость читерский скрипт автотриммирования... Его основное достоинство - он очень маленький и экономит кнопки Теперь для 2-х (...и даже 3-х!, при использовании педалей от CH) осей их достаточно всего... одна! Именно при её нажатии будет "разрешаться" триммирование в сторону... в которую отклонен в данный момент РУС. От ранее опубликованных отличается тем, что управляет триммерами из игры, а не подменяет их "смещением" РУСа ...а если задать для cms.b1...cms.b4 не DX Mode, а клавиатурные комбинации, то переназначений управления в настройках не потребуется... Использовать короткими нажатиями... // AutoTrim_on_Stick Script [spoiler]cms.b1 = js1.b2 and [js1.a1 < 127]; // cms.b1 - трим нос вверх cms.b2 = js1.b2 and [js1.a1 > 128]; // cms.b2 - трим нос вниз cms.b3 = js1.b2 and [js1.a2 < 127]; // cms.b3 - трим крен влево cms.b4 = js1.b2 and [js1.a2 > 128]; // cms.b4 - трим крен вправо[/spoiler] endScript ...и если темп регулировки триммеров в игре вам кажется слишком большим, то можно замедлить их работу имитацией коротких нажатий (спасибо Zulu за популяризацию использования всяких разных таймеров) //Autotrim_on_Stick_with_timer script Timer(interval,d1,4,5) = js1.b2 or d1;// 4-"время нажатия" 5- интервал между нажатиями. Подбирите значения под себя... [spoiler]cms.b1 = [js1.a1 < 127] and d1; cms.b2 = [js1.a1 > 128] and d1; cms.b3 = [js1.a2 < 127] and d1; cms.b4 = [js1.a2 > 128] and d1;[/spoiler] endScript ...обратите внимание на строчку Timer(interval,d1,4,5) = js1.b2 or d1; где d1 используется и в качестве "результата" и в качестве "аргумента". Благодаря этому после отпускания кнопки триммирования (js1.b2), cms.b1... cms.b4 не "залипают", а всегда сбрасываются в 0 это гуд. тоже хочу сделать, но просто под кнопки (спаял панельку, теперь не экономлю ). Изменено 5 октября 2014 пользователем NobbyNobbs
72AG_terror Опубликовано: 6 октября 2014 Опубликовано: 6 октября 2014 (изменено) Простой и малость читерский скрипт автотриммирования... Его основное достоинство - он очень маленький и экономит кнопки Теперь для 2-х (...и даже 3-х!, при использовании педалей от CH) осей их достаточно всего... одна! Именно при её нажатии будет "разрешаться" триммирование в сторону... в которую отклонен в данный момент РУС. От ранее опубликованных отличается тем, что управляет триммерами из игры, а не подменяет их "смещением" РУСа ... Крутая идея! Утащу себе. Изменено 6 октября 2014 пользователем 72AG_terror
=59=Moroka Опубликовано: 7 октября 2014 Опубликовано: 7 октября 2014 (изменено) ... можно ещё капельку покруче, если сделать скрипт двухрежимным: при небольших отклонениях тонко триммируемся короткими импульсами таймера, а при значительных - более грубо, по кнопке... // Autotrim_on_Stick_with_timer_dual-mode // script Timer(interval,d1,2,5) = js1.b2; // js1.b2 - кнопка "разрешающая" автотриммирование cms.b1 = [js1.a1 < 127] and d1 or [js1.a1 < 112] and js1.b2; cms.b2 = [js1.a1 > 128] and d1 or [js1.a1 > 143] and js1.b2; cms.b3 = [js1.a2 < 127] and d1 or [js1.a2 < 112] and js1.b2; cms.b4 = [js1.a2 > 128] and d1 or [js1.a2 > 143] and js1.b2; endScript Изменено 7 октября 2014 пользователем =J13=Moroka 1
=59=Moroka Опубликовано: 9 октября 2014 Опубликовано: 9 октября 2014 (изменено) ]Вот диаграммы логики триггер-таймеров с учетом примечания по PEROID и исправления в OFFDELAY CMLogics2.gif Ковыряясь со всякими разными таймерами обнаружил ещё одну неточность. Касается INTERVALa. Последовательность импульсов обрывается сразу при отпускании кнопки... Дорисовал красным... Изменено 9 октября 2014 пользователем =J13=Moroka
=59=Moroka Опубликовано: 14 октября 2014 Опубликовано: 14 октября 2014 Фиксированные значения на микростике 5 ... или заключительные серии СНанты Барбары Не отступив от намеченного и "озвученного" ранее плана, отладил и опробовал очередные (и надеюсь последние) варианты управления осью с помошью микростика с фиксацией значений.В этих вариантах изменение значение оси происходит при отклонении мкстика в ту или иную сторону от центра при любой его начальной позиции. (Ранее начало отсчета задавалось при отпускании мкстика в центр. положение). Чесговоря, не такая уж большая разница, но есть и пара плюсов:- собственно, можно не беспокоиться об обязательном возврате мкстика в центр - можно смело уменьшать dz (мертвую зону в центральном положении) до уровня "дрожания" и меня реально хватало еденички 1 вариант с масштабируемым расчетом (с любого зафиксированного значения весь возможный диапазон будет "охвачен" при полном отклонении мкстика) // CMS Script File // Title: Fix-MJoy adapt din_base %define tresh 2 // порог для фиксации нового отсчета %define dz 1 // мертвая зона для оси мкстика %define basecx a3 // динамическая база Сms %define basejh a4 // динамическая база Js верхнего диапазона %define basejl a5 // динамическая база Js нижнего диапазона %define htr a6 // начало верхнего диапазона %define ltr a7 // граница нижнего диапазона %define js js1.a1 // указываем какую ось мкстика используем script htr = 128 + dz; // расчет htr ...с учетом dz ltr = 127 - dz; // то же для ltr if([ js > htr ]) then // если мкстик отклонен в зону верхнего диапазона, то вычисляем... // расчетное значение отклонения мкстика с учетом масштабирования - a1 a1 = basecx + ((255 - basecx) * (js - basejh)) / (255 - basejh); if ([ a1 > cms.a1 ]) then // Если а1 больше текущего значения cms, то... cms.a1 = a1; // Фиксируем "максимум" отклонения мкстика endif if ([a1 < (cms.a1 - tresh)]) then // если мкстик пошел в обратную сторону на величину большую tresh basecx = cms.a1 - tresh; //запоминаем новую базу отсчета для Cms basejh = js; //запоминаем новую базу отсчета Js в верхнем диапазоне endif endif // if([ js < ltr ]) then // если мкстик отклонен в зону нижнего диапазона, то вычисляем... a1 = (basecx*js) / basejl; // ...для этого диапазона формула проще if ([ a1 < cms.a1 ]) then // Если а2 меньше текущего значения cms, то... cms.a1 = a1; // Фиксируем "минимум" мкстика endif if ([a1 > (cms.a1 + tresh)]) then // если мкстик пошел в обратную сторону на величину большую tresh basecx = cms.a1 + tresh; //Запоминаем новую базу отсчета для Cms basejl = js; //запоминаем новую базу отсчета Js в нижнем диапазоне endif endif endscript 2-й вариант - с постоянной, задаваемым в %define, как slope крутизной (При slope равным, например 3, понадобится почти 4 полных отклонения!) // CMS Script File // Title: Fix-MJoy const din_base %define tresh 2 // порог для фиксации нового отсчета %define dz 1 // мертвая зона для оси мкстика %define basecx a3 // динамическая база Сms %define basejh a4 // динамическая база Js верхнего диапазона %define basejl a5 // динамическая база Js нижнего диапазона %define htr a6 // начало верхнего диапазона %define ltr a7 // граница нижнего диапазона %define js js1.a1 // указываем какую ось мкстика используем %define slope 3 // коэфф. крутизны регулирки: чем больше, тем плавнее script htr = 128 + dz; // расчет htr ...с учетом dz ltr = 127 - dz; // то же для ltr if([ js > htr ]) then // если мкстик отклонен в сторону верхнего диапазона, то вычисляем... a1 = (2*(js-basejh))/slope + basecx; // увеличиваем на постоянное прирощение if ([ a1 > cms.a1 ] and [a1 <= 256]) then // Если а1 больше текущего значения cms, но не вышло за 255 cms.a1 = a1; // Фиксируем "максимум" мкстика endif if ([a1 < (cms.a1 - tresh)]) then // если мкстик пошел в обратную сторону на величину большую tresh basecx = cms.a1 - tresh; //запоминаем новую базу отсчета для Cms basejh = js; //запоминаем новую базу отсчета Js в верхнем диапазоне endif endif if([ js < ltr ]) then // если мкстик отклонен в зону нижнего диапазона, то вычисляем... a1 = (2*(js-basejl))/slope + basecx; // уменьшаем на постоянное прирощение if ([ a1 < cms.a1 ] and [-1 <= a1]) then // Если а1 меньше текущего значения cms, но не упало менее 0 cms.a1 = a1; // Фиксируем "минимум" мкстика endif if ([a1 > (cms.a1 + tresh)]) then // если мкстик пошел в обратную сторону на величину большую tresh basecx = cms.a1 + tresh; //Запоминаем новую базу отсчета для Cms basejl = js; //запоминаем новую базу отсчета Js в нижнем диапазоне endif endif endscript ПС Кстати, когда только начинал искать решение фиксации значений осей мкстика, то даже на знаменитом CH Hangar не нашел ничего по этой теме... Неужто так не востребовано?
NobbyNobbs Опубликовано: 23 ноября 2014 Автор Опубликовано: 23 ноября 2014 Ап. Камрады, скажите, а функция SCALE с педалями напрямую работает? А то у меня или лыжи не едут или я чего-то не так понял - с файтерстиком работает тупо вот так: scale(js1.a1,100,0,gain3); , а с педалями не хочет, приходится городить огород типа: %define rudder cms.a6 script rudder=js3.a3; scale(rudder,100,0,gain2); endscript ну и соответственно в ГУЕ цеплять педали через виртуальную ось.
Ahtuba Опубликовано: 27 ноября 2014 Опубликовано: 27 ноября 2014 Крутая идея! Утащу себе. Простой и малость читерский скрипт автотриммирования... Его основное достоинство - он очень маленький и экономит кнопки Теперь для 2-х (...и даже 3-х!, при использовании педалей от CH) осей их достаточно всего... одна! Именно при её нажатии будет "разрешаться" триммирование в сторону... в которую отклонен в данный момент РУС. От ранее опубликованных отличается тем, что управляет триммерами из игры, а не подменяет их "смещением" РУСа ... В чем разница управления триммированием "из игры" и "смещением РУСа"? Я в том смысле, насколько корректно последнее в плане управления аппаратом? К примеру, я триммируюсь "скриптом" (смещение РУСа, по Вашему).
=59=Moroka Опубликовано: 27 ноября 2014 Опубликовано: 27 ноября 2014 (изменено) 2Ahtuba Имеется в виду, что когда триммирование "из игры", то скрипт автоматически "нажимает" кнопки на которых висят команды триммирования из игры. Таким образом триммируется модель в игре. А когда "смещение РУСа", игра вообще не причем... Тут уже триммируется сам РУД Самый правильный вариант здесь Terror выше выкладывал... А вот насчет корректности... Чес говоря не слышал, чтобы в реале одной кнопкой можно было автотриммироваться... А вот некое подобие смещения в реальных вертолетах существует (например Ка-50). Правда там вроде весь РУС фиксируется. ПыСы: "читерский" вариант оправдан если Хатка под обзор занята, а свободных кнопок мало... Изменено 27 ноября 2014 пользователем =J13=Moroka
=59=Moroka Опубликовано: 27 ноября 2014 Опубликовано: 27 ноября 2014 (изменено) Ап. Камрады, скажите, а функция SCALE с педалями напрямую работает? А то у меня или лыжи не едут или я чего-то не так понял.... Странно-неестественно... Вроде никто такой возможности не отменял... Однако, радует, что победил таки проблему... PS... педалей нет ( Изменено 27 ноября 2014 пользователем =J13=Moroka
Ahtuba Опубликовано: 27 ноября 2014 Опубликовано: 27 ноября 2014 2Ahtuba Имеется в виду, что когда триммирование "из игры", то скрипт автоматически "нажимает" кнопки на которых висят команды триммирования из игры. Таким образом триммируется модель в игре. А когда "смещение РУСа", игра вообще не причем... Тут уже триммируется сам РУД Самый правильный вариант здесь Terror выше выкладывал... А вот насчет корректности... Чес говоря не слышал, чтобы в реале одной кнопкой можно было автотриммироваться... А вот некое подобие смещения в реальных вертолетах существует (например Ка-50). Правда там вроде весь РУС фиксируется. ПыСы: "читерский" вариант оправдан если Хатка под обзор занята, а свободных кнопок мало... У меня прописано "вертолетное триммирование" как грубое, на одной кнопке. Мягко триммирусь (довожу), если надо, хаткой. Но вопрос у меня был по поводу следующего: -триммируясь "смещением Руса" я отклоняю основные рули, а не триммерные плоскости. Да, самолет выравнивается безболезненно. Летит ровно (или неровно), но как его заставил. На штурме или ястребке - без проблем. Но при стрельбе? Че-то терзают сомнения - не получает ли, из-за этого, самолет какого-нибудь скольжения. А стрелять со скольжения - это еще то занятие. Или я ищу причину своей косоцелкости в стрельбе?
=59=Moroka Опубликовано: 27 ноября 2014 Опубликовано: 27 ноября 2014 А педали СН? То же в скрипте прописаны? ...Потому как скольжение только от них....
Ahtuba Опубликовано: 27 ноября 2014 Опубликовано: 27 ноября 2014 А педали СН? То же в скрипте прописаны? ...Потому как скольжение только от них.... У меня кабан. Руд и Рус после компиляции скрипта выступают как единое устройство. Педали сим видит отдельным девайсом. Поэтому, в скриптах на ось РН никак не воздействую. Хотя, хотчется ошэна.
NobbyNobbs Опубликовано: 27 ноября 2014 Автор Опубликовано: 27 ноября 2014 Хотя, хотчется ошэна. Если ошена хочется, то glovepie наверное может помочь. 1
Ahtuba Опубликовано: 27 ноября 2014 Опубликовано: 27 ноября 2014 Если ошена хочется, то glovepie наверное может помочь. Ой, а это что за пирожок?
NobbyNobbs Опубликовано: 27 ноября 2014 Автор Опубликовано: 27 ноября 2014 Ой, а это что за пирожок? это колдунская софтина. но не буду пересказывать своими словами, что она делает: http://forum.warthunder.ru/index.php?/topic/14697-pp-joy-i-glovepie-dopolnitelnye-vozmozhnosti-nastroiki-upr/ 2
=59=Moroka Опубликовано: 1 декабря 2014 Опубликовано: 1 декабря 2014 (изменено) Ещё один вариант подавление шумов/дрожания оси за счет искусственного люфта... Интересно, что этот скрипт является практически копией самого простого алгоритма фиксирования значений микростика, с той лишь разницей, что лишь изменены формулы расчетных характеристик a1 и a2. Вернее даже ,что алгоритм фиксации является частным случаем представленного сейчас, с той разницей, что величина люфта, равна половине хода оси! // Luft 2 %define mz 10 // задаем величину необходимого люфта script a1 =(255*(js1.a3-mz))/(255-mz); a2 = (255*js1.a3)/(255-mz); if ([a1 > cms.a1]) THEN cms.a1 = a1; endif if ([a2 < cms.a1]) THEN; cms.a1 = a2; endif endscript От ранее предложенных скриптов отличается "адаптацией" регулировки, т.е. при полном отклонении получаем полный диапазон регулировок (0...255) без лишних строк кода для програмируемых скачков на краях диапазона. (чем они лучше дрожи и шума, кстати?) Сам скачок никуда не давается, а "размазывается" по всему диапазону в виде нескольких минимальных отклонений от линенйности... Количество скачков равно величине зоны люфта. Фактически это тот же добор скачка, только совершаемый за несколько раз... "График" работы пояснен на схеме (Вариант 2). Для сравнения рядом схема работы предыдущего алгоритма (Вариант 1)... Изменено 1 декабря 2014 пользователем =J13=Moroka 4
Mikolai4 Опубликовано: 12 января 2015 Опубликовано: 12 января 2015 посоветуйте, конечно не совсем в тему ), но страдаю в тундре, http://forum.warthunder.ru/index.php?/topic/130089-ch-pro-pedals-os-tormozov-nastroena-no-v-samoj-igre-net-re/
MK.MrX Опубликовано: 12 января 2015 Опубликовано: 12 января 2015 посоветуйте, конечно не совсем в тему ), но страдаю в тундре, http://forum.warthunder.ru/index.php?/topic/130089-ch-pro-pedals-os-tormozov-nastroena-no-v-samoj-igre-net-re/ Сброс настроек делал?
Mikolai4 Опубликовано: 12 января 2015 Опубликовано: 12 января 2015 брос настроек делал? да, несколько раз делал, настраивал вручную и по новой...Тут в БЗС - все отлично, а там в тундре - глюк непонятный, при этом назначал ось тормозов ради интереса на свой saitek pro fligth guadrant, он работает зараза ))
MK.MrX Опубликовано: 12 января 2015 Опубликовано: 12 января 2015 да, несколько раз делал, настраивал вручную и по новой... Тут в БЗС - все отлично, а там в тундре - глюк непонятный, при этом назначал ось тормозов ради интереса на свой saitek pro fligth guadrant, он работает зараза )) Должно быть так http://forum.warthunder.ru/index.php?/topic/31578-video-ot-mkmrx-tolko-sb/?p=669343
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас