Jump to content
NobbyNobbs

Программирование джойстиков CH Products

Recommended Posts

Прикрепи скрипт. Я тебе интегрирую. :)

 

Вот я сделал шумоподавитель для тангажа 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

Нужно прикрутить электротриммирование к крену(к другим осям не нужно или я потом сам сделаю на основе скрипта для крена)

 

Share this post


Link to post
Share on other sites

ИМХО вешать нойзгейт, работающий по такому принципу на оси крена/тангажа/рысканья не самая лучшая идея. Это добровольный люфт.

Share this post


Link to post
Share on other sites

ИМХО вешать нойзгейт, работающий по такому принципу на оси крена/тангажа/рысканья не самая лучшая идея. Это добровольный люфт.

Ну :popcorm: других шумоподавителей пока нет.Недостаток этого скрипта в том что кружок не возвращается точно в центр.Но я выставил мёртвую зону в 2 единицы.

Edited by beretta5

Share this post


Link to post
Share on other sites

Я его модернизировал :gamer: теперь нет люфта,индикатор в центр возвращается

%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

 
 
 
 
 
 

Share this post


Link to post
Share on other sites

Я его модернизировал :gamer: теперь нет люфта,индикатор в центр возвращается

 

 

%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, но и при меньших значениях картина в принципе будет такой же. Мне кажется, что с таким РУСом летать не получится.

 

Edited by NobbyNobbs

Share this post


Link to post
Share on other sites

Вот я сделал шумоподавитель для тангажа 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

 

 

  • Upvote 2

Share this post


Link to post
Share on other sites

Дело в том, что люфт не в центре, люфт везде. Так устроен этот алгоритм...   Мне кажется, что с таким РУСом летать не получится.

Beretta5 будет за люфтваффе летать :)...

Edited by =J13=Moroka
  • Upvote 1

Share this post


Link to post
Share on other sites

Beretta5 будет за люфтваффе летать :)...

Не врубаюсь я про какой люфт он там говорит :wacko: Я пока не воевал,просто полетал,фигуры там покрутил и никакого люфта не обнаружил.По крайней мере в управление самолётом разницы я не почувствовал.Мёртвые зоны на всех осях-6.

Share this post


Link to post
Share on other sites

Добавил к твоему скрипту триммирование по элеронам. Триммирование от хатки (пипки) влево-вправо. Наслаждайся. :)

 

Насладиться пока не получилось :( вот часть скрипта для оси крена.Центр оси с ним встаёт вправо на 228 единиц,триммирование не работает.Может я чё та не так сделал :sorry:

 

%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

 

 

Edited by beretta5

Share this post


Link to post
Share on other sites

Я тут подумал :gamer: Может стоит интегрировать скрипт триммирования на основе скрипта подруливания,мне удалось совместить его с "шумоподавителем". Нужно переделать блок,который возвращает шарик в центр,после того как отпускаешь кнопку хатки.К примеру,нажал кнопку-шарик сместился чуть в сторону на определённую величину.И сделать блок,который при нажатии выбранной кнопки ставит триммер в 0.

Share this post


Link to post
Share on other sites

Насладиться пока не получилось :( вот часть скрипта для оси крена.Центр оси с ним встаёт вправо на 228 единиц,триммирование не работает.Может я чё та не так сделал :sorry:

 

Проверил, работает. Давай разбираться. Прикладываю тестовую карту (на ней только крен и работает).

Я тут подумал :gamer: Может стоит интегрировать скрипт триммирования на основе скрипта подруливания,мне удалось совместить его с "шумоподавителем". Нужно переделать блок,который возвращает шарик в центр,после того как отпускаешь кнопку хатки.К примеру,нажал кнопку-шарик сместился чуть в сторону на определённую величину.И сделать блок,который при нажатии выбранной кнопки ставит триммер в 0.

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

trim_ailerons.zip

Share this post


Link to post
Share on other sites

Проверил, работает. Давай разбираться. Прикладываю тестовую карту (на ней только крен и работает).

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

В тестовой карте шарик в центре но триммер не работает

Стоп,заработало когда выставил DX Device-none и DX Axis-none

А как триммер сбрасывать в 0?

Edited by beretta5

Share this post


Link to post
Share on other sites

Я кажется понял в чём дело :umnik2:У нас в скрипте есть %Define Trim a2. У меня в скрипте лимитатора оборотов есть ось а2 из за неё,похоже,шарик и смещается вправо в позицию 228.Вот этот скрипт лимитатор оборотов

 

IF ([CURRENTMODE EQ 0]) THEN
if([a8==0])then
a2=100;
else
if([a8==1])then
a2=150;
else
if([a8==2])then
a2=205;
else
a2=255;
endif
endif
endif
cms.a8=(a2*js2.a3)/255+(255-a2);
sequence
wait((js2.b16)and[a8<3]);
a8=a8+1;
endsequence
sequence
wait((js2.b14)and[a8>0]);
a8=a8-1;
endsequence

 

 

Edited by beretta5

Share this post


Link to post
Share on other sites

Да,щёрт побери :wacko:сделал так %Define Trim a4.А2 поменял на А4 и всё заработало.Только нужен возврат триммера в 0 при нажатии кнопки.

Share this post


Link to post
Share on other sites

 

 

Только нужен возврат триммера в 0 при нажатии кнопки.
 

 

это просто мысли вслух или вопрос такой?

 

до слова скрипт написать:

%define ResetTrim js2.b__ //вместо __ подставить номер нужной кнопки

 

после слова скрипт:

 

if (ResetTrim) then

trim=0;

endif

Share this post


Link to post
Share on other sites

 

 

это просто мысли вслух или вопрос такой?

 

до слова скрипт написать:

%define ResetTrim js2.b__ //вместо __ подставить номер нужной кнопки

 

после слова скрипт:

 

if (ResetTrim) then

trim=0;

endif

 

Шпасиба ;) Повоевал маленко,воздействия люфтов не обнаружил :salute:

Share this post


Link to post
Share on other sites

Мужики, а вы точно друг друга понимаете???  

Люфт - это свободный ход. (люфт - от немецкого, воздух, пространство)  Применительно к джойстику, это свободное небольшое механическое болтание ручки, которое не вызывает электрического перемещения контактов в потенциометре (и не отражается на экране монитора).  Люфт - он всегда МЕХАНИЧЕСКИЙ.

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

Edited by [I.B.]Zulu

Share this post


Link to post
Share on other sites

Люфт - он всегда МЕХАНИЧЕСКИЙ.

 

 

А я ведь даже видео присобачил  :)

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

Из за используемой в скрипте скользящей мертвой зоны происходит следующее: виртуальная ось при выполнении одного из условий, начинает ползти точно за аналоговой 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

post-14111-0-27601200-1412379069_thumb.png

Share this post


Link to post
Share on other sites

 

 

Zulu' timestamp='1412374347' post='208456'] Мужики, а вы точно друг друга понимаете???

Он имеет в виду рассинхронизацию осей :popcorm: Мне лично она летать не мешает,видимо потому что она мизерная.У меня то мёртвая зона в два раза меньше,к тому же надо смотреть всё это дело в игре а не в GUI.У меня рули ходят за ручкой без проблем.А вот эффект от "шумоподавления" я сразу заметил.Теперь я могу ровно вести машину по полосе при разгоне.Раньше мну колбасило из стороны в сторону из-за шума резистора.

Share this post


Link to post
Share on other sites

Простой и малость читерский скрипт автотриммирования... ;)

 

Его основное достоинство - он очень маленький и экономит кнопки :)

Теперь для 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
Edited by =J13=Moroka
  • Upvote 1

Share this post


Link to post
Share on other sites

Простой и малость читерский скрипт автотриммирования... ;)

 

Его основное достоинство - он очень маленький и экономит кнопки :)

Теперь для 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

 

 

это гуд. тоже хочу сделать, но просто под кнопки (спаял панельку, теперь не экономлю  :biggrin: ).

Edited by NobbyNobbs

Share this post


Link to post
Share on other sites

 

Простой и малость читерский скрипт автотриммирования... ;)

 

Его основное достоинство - он очень маленький и экономит кнопки :)

Теперь для 2-х (...и даже 3-х!, при использовании педалей от CH) осей их достаточно всего... одна! Именно при её нажатии будет "разрешаться" триммирование в сторону... в которую отклонен в данный момент РУС. От ранее опубликованных отличается тем, что управляет триммерами из игры, а не подменяет их "смещением" РУСа

...

 

Крутая идея! Утащу себе.

Edited by 72AG_terror

Share this post


Link to post
Share on other sites

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

// 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
Edited by =J13=Moroka
  • Upvote 1

Share this post


Link to post
Share on other sites

]Вот диаграммы логики триггер-таймеров с учетом примечания по PEROID и исправления в OFFDELAY

 

attachicon.gifCMLogics2.gif

Ковыряясь со всякими разными таймерами обнаружил ещё одну неточность. Касается INTERVALa. Последовательность импульсов обрывается сразу при отпускании кнопки...

Дорисовал красным...

post-877-0-57937500-1412862294_thumb.jpg

Edited by =J13=Moroka

Share this post


Link to post
Share on other sites

Фиксированные значения на микростике 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 не нашел ничего по этой теме... Неужто так не востребовано?

Share this post


Link to post
Share on other sites

Ап.

 

Камрады, скажите, а функция SCALE с педалями напрямую работает? 

А то у меня или лыжи не едут или я чего-то не так понял - с файтерстиком работает тупо вот так:

 

scale(js1.a1,100,0,gain3);

, а с педалями не хочет, приходится городить огород типа: 

 

%define rudder cms.a6
script
rudder=js3.a3;
scale(rudder,100,0,gain2);
endscript

ну и соответственно в ГУЕ цеплять педали через виртуальную ось.

Share this post


Link to post
Share on other sites

Крутая идея! Утащу себе.

 

 

Простой и малость читерский скрипт автотриммирования... Его основное достоинство - он очень маленький и экономит кнопки Теперь для 2-х (...и даже 3-х!, при использовании педалей от CH) осей их достаточно всего... одна! Именно при её нажатии будет "разрешаться" триммирование в сторону... в которую отклонен в данный момент РУС. От ранее опубликованных отличается тем, что управляет триммерами из игры, а не подменяет их "смещением" РУСа ...

В чем разница управления триммированием "из игры" и "смещением РУСа"?

Я в том смысле, насколько корректно последнее в плане управления аппаратом?

К примеру, я триммируюсь "скриптом" (смещение РУСа, по Вашему).

Share this post


Link to post
Share on other sites

2Ahtuba

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

А когда "смещение РУСа", игра вообще не причем... Тут уже триммируется сам РУД :) Самый правильный вариант здесь Terror выше выкладывал...

А вот насчет корректности... Чес говоря не слышал, чтобы в реале одной кнопкой можно было автотриммироваться... А вот некое подобие смещения в реальных вертолетах существует (например Ка-50). Правда там вроде весь РУС фиксируется.

ПыСы: "читерский" вариант оправдан если Хатка под обзор занята, а свободных кнопок мало...

Edited by =J13=Moroka

Share this post


Link to post
Share on other sites

Ап.

 

Камрады, скажите, а функция SCALE с педалями напрямую работает? 

А то у меня или лыжи не едут или я чего-то не так понял....

Странно-неестественно... Вроде никто такой возможности не отменял... :blink:

Однако, радует, что победил таки проблему... :good:

PS... педалей нет (

Edited by =J13=Moroka

Share this post


Link to post
Share on other sites

2Ahtuba

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

А когда "смещение РУСа", игра вообще не причем... Тут уже триммируется сам РУД :) Самый правильный вариант здесь Terror выше выкладывал...

А вот насчет корректности... Чес говоря не слышал, чтобы в реале одной кнопкой можно было автотриммироваться... А вот некое подобие смещения в реальных вертолетах существует (например Ка-50). Правда там вроде весь РУС фиксируется.

ПыСы: "читерский" вариант оправдан если Хатка под обзор занята, а свободных кнопок мало...

У меня прописано "вертолетное триммирование" как грубое, на одной кнопке. Мягко триммирусь (довожу), если надо, хаткой.

Но вопрос у меня был по поводу следующего:

-триммируясь "смещением Руса" я отклоняю основные рули, а не триммерные плоскости.

Да, самолет выравнивается безболезненно. Летит ровно (или неровно), но как его заставил. На штурме или ястребке - без проблем.

Но при стрельбе? Че-то терзают сомнения - не получает ли, из-за этого, самолет какого-нибудь скольжения. А стрелять со скольжения - это еще то занятие.

Или я ищу причину своей косоцелкости в стрельбе? :wacko:

Share this post


Link to post
Share on other sites

А педали СН? То же в скрипте прописаны?

...Потому как скольжение только от них....

Share this post


Link to post
Share on other sites

А педали СН? То же в скрипте прописаны?

...Потому как скольжение только от них....

У меня кабан. Руд и Рус после компиляции скрипта выступают как единое устройство. Педали сим видит отдельным девайсом.

Поэтому, в скриптах на ось РН никак не воздействую.

Хотя, хотчется ошэна. :o:

Share this post


Link to post
Share on other sites

Хотя, хотчется ошэна. :o:

Если ошена хочется, то glovepie наверное может помочь.

  • Upvote 1

Share this post


Link to post
Share on other sites

Если ошена хочется, то glovepie наверное может помочь.

Ой, а это что за пирожок?

Share this post


Link to post
Share on other sites

Ещё один вариант подавление шумов/дрожания оси за счет искусственного люфта...

Интересно, что этот скрипт является практически копией самого простого алгоритма фиксирования значений микростика, с той лишь разницей, что лишь изменены формулы расчетных характеристик  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)...

post-877-0-83551900-1417466473_thumb.jpg

post-877-0-90069200-1417466552_thumb.jpg

Edited by =J13=Moroka
  • Upvote 4

Share this post


Link to post
Share on other sites

 

 

брос настроек делал?
 

да, несколько раз делал, настраивал вручную и по новой...
Тут в БЗС - все отлично, а там в тундре  - глюк непонятный, при этом назначал ось тормозов ради интереса на свой saitek pro fligth guadrant, он работает зараза ))

Share this post


Link to post
Share on other sites

 

да, несколько раз делал, настраивал вручную и по новой...

Тут в БЗС - все отлично, а там в тундре  - глюк непонятный, при этом назначал ось тормозов ради интереса на свой saitek pro fligth guadrant, он работает зараза ))

 

Должно быть так http://forum.warthunder.ru/index.php?/topic/31578-video-ot-mkmrx-tolko-sb/?p=669343

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...