Перейти к публикации

Рекомендованные сообщения

Опубликовано:

Отличная тема,много примеров...

Вот такой есть вопросик - где бы резисторами разжиться ихними?

Может кто знает?Раньше в КомпТуРу были...

Опубликовано:

У меня вопрос к освоившим программирование СН джентльменам. Каким образом вы определяете какая ось какого устройства соответствует определенному наименованию?

 

%DEFINE J_Pedals JS1.A3 // Педали ( CH ProPedals, педали на первой вкладке )
  вот как в цитате,  почему педали не JS3.A1 например?

У кота  все оси поименованы и там невозможно их перепутать. А вот СН у меня возникли проблемы, не понимаю что откуда. Хотел разобраться подробнее с системой программирования СН и чего то много неочевидных вещей как-то.

Опубликовано: (изменено)

вот как в цитате,  почему педали не JS3.A1 например? У кота  все оси поименованы и там невозможно их перепутать. А вот СН у меня возникли проблемы, не понимаю что откуда. Хотел разобраться подробнее с системой программирования СН и чего то много неочевидных вещей как-то.

 

в принципе, в ГУЕ всегда видно ху есть кто.

 

post-14111-0-74590000-1407847039_thumb.png

 

vs

 

post-14111-0-11824100-1407847394_thumb.png

Изменено пользователем NobbyNobbs
  • Поддерживаю! 1
Опубликовано:

Отличная тема,много примеров...

Вот такой есть вопросик - где бы резисторами разжиться ихними?

Может кто знает?Раньше в КомпТуРу были...

Раньше были, да..  Потому что у CH был собственный "магазин" запчастей к их джоям. Резюки, пружины, кнопули. Удивительно дело! Тока закрыли они его. Их джои и так по десятку лет служат игрокам, и если им еще и резюки в запчасти давать, то кому они новые продавать будут???

Ну это все лирика.  

 

Я недавно озадачился темой, хотел купить в запас (Комбатстику уже почти 6 лет наверное,). Ведь раньше то были!  ОКазалось:

Чичас нигде не купить.  Даже на ебае.    Резюки там военные ( CTS HP 100) с MIL допуском.   2 млн. циклов наработки на отказ!!!!   (для сравнения, типовые потенциометры в бытовой радиоэлектронике и дешевых джоях имеют заявленную жизнь 15000 циклов )

 

Оригинальные карбоновые: 

post-4254-0-30899500-1407864561_thumb.gif

 

Исходя из надежностных характеристик можно попробовать заменить  такими (серия P30L - керамометалика).  Форма другая, но шток похоже одинаковый.  Брать нужно тип А (линейные)

post-4254-0-27466200-1407864808_thumb.gif

Опубликовано:

Отличная тема,много примеров...

Вот такой есть вопросик - где бы резисторами разжиться ихними?

Может кто знает?Раньше в КомпТуРу были...

 

Сейчас с ними -- беда. Самый простой вариант (за исключением аналогов) -- купить БУ ручку (на запчасти) на ebay.

Опубликовано: (изменено)

Угу, и самый классный БУ вариант, это  наверное ТроттлКвадрант.    Там резюков Аж 6, и износ будет минимальный, ведь не РУС.    

 

Тока бушных квадрантов очень мало предлагается, и цена вовсе не бросовая... Хотя... может просто долго не лежат?

Изменено пользователем [I.B.]Zulu
Опубликовано: (изменено)

Может что-то в Чип-Дипе поискать?

 

Комбатстику уже почти 6 лет наверное

А я Файтерстик где-то в 2005-2006 брал если память не изменяет.Один раз резюки менял уже.

В общем,написал в саппорт СН,посмотрим что ответят.

Насчёт Квадранта идея хорошая :biggrin: !!!

Изменено пользователем =DF=Metr
Опубликовано: (изменено)

Угу, и самый классный БУ вариант, это  наверное ТроттлКвадрант.    Там резюков Аж 6, и износ будет минимальный, ведь не РУС.    

 

Тока бушных квадрантов очень мало предлагается, и цена вовсе не бросовая... Хотя... может просто долго не лежат?

По слухам в квадранте они припаяны, их оттеда трудно выдрать. Хотя, очень трудно поверить в это.

Изменено пользователем 72AG_terror
Опубликовано: (изменено)

Ну да, которые на рычагах (т.е. HP100). Ножками впаяны. Верно. Но пяльник и шинка для впитывания припоя тебе в помощь. Смотри тут: 

Изменено пользователем [I.B.]Zulu
Опубликовано: (изменено)

Вот нашёл кой чего: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 шт. в руки.   Если будешь брать, возьми и мне два комплекта, что бы хоть не оплачивать несколько раз пересылку копеечных бандеролек.   Деньги сразу тебе вышлю. Цену доставки досюда можешь делить пополам   :)

Изменено пользователем [I.B.]Zulu
Опубликовано:

Чего-то не получается связаться с продавцом.Надо узнать,сколько стоит пересылка.

Опубликовано:

Хе, а ты сюда смотрел: http://www.project-parts.com/itempix/530-014B.jpg   - резьбы нет!  Но это правда фигня, можно верхнюю крышку от исходного поставить ( с резьбой).  Просто меня стали терзать смутные сомнения, что же это за резюки такие, и откуда они взялись в таком количестве, по такой смешной цене, и без резьбы.  :)

Опубликовано:

"Этот продавец будет отсутствовать до 29.08.2014 и в данный момент не может обработать заказ. Вы можете добавить этот товар в список отслеживания и купить его позже."

Вот наверное почему не получается связаться.Кстати,саппорт СН тоже молчит.

Опубликовано: (изменено)

"Этот продавец будет отсутствовать до 29.08.2014 и в данный момент не может обработать заказ. Вы можете добавить этот товар в список отслеживания и купить его позже."

Вот наверное почему не получается связаться.Кстати,саппорт СН тоже молчит.

Пожалуй, что так.  Кстати - в Throttle Quadrant именно такие, без резьбы оказывается.  Они там за ножки в плату впаяны. Так что, ждем 29-го

Изменено пользователем [I.B.]Zulu
Опубликовано:

Вообще,когда менял их в файтерстике резьбы там не помню.Они вставляются в отверстия.Разберу-посмотрю.

Опубликовано:

В педалях точно с резьбой.  Самолично подтягивал :)  Да и тут в общем то резьба изображена.   Видимо есть варианты.

Опубликовано:

 

Здравствуйте,

Я сожалею, но мы не продаем частей части.

 

Джон Soucy

Технический Представитель

APEM, Inc.

970 Park Center Drive

Vista, CA 92081

Офис: (760) 598-2518 

 

ответ от CH Products на мой вопрос по поводу резисторов.Жаль.

Разбирал Файтерстик,резьбы нету.Просто вставляются в отверстия они.

Опубликовано:

 

 

Разбирал Файтерстик,резьбы нету.Просто вставляются в отверстия они.
 

 

Ок. Отлично. Значит надо заказывать! :)

Опубликовано: (изменено)

Братья пацаки :scratch_one-s_head: тупой вопрос но всё таки.Один скрипт я сделал,он работает.А как сделать другой скрипт?Как открыть новую вкладку в CM editor?

 



 

 

 

 

Изменено пользователем beretta5
Опубликовано:

Всю логику можно реальзовать в одном скрипте. Как я понимаю каждой конфигурации (map файл), может соответсвовать один скрипт файл. Т.е. возможности открыть еще одну вкладку нет.

 

CH Control Manager штука, конечно, архаичная, но дело свое делает на отлично.

Опубликовано:

 

День добрый!

К сожалению, сейчас резисторов нет в наличии. Мы попробуем уточнить у

производителя возможность отгрузки резисторов, но поставка может растянуться

на пару месяцев.

 

С уважением,

Светлана Шахова

www.comp2.ru

Ответили из комптуру.

Опубликовано:

Прикол, думаю они спросят там же где и ты :)  И получат тот же ответ :)

 

 

ИМХО, надо ждать 29-го, когда возобновит поставку "отпускник" с ebay :)

Опубликовано: (изменено)

 

 Ещё немного о программировании "правильных" 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 //флага отпусканя всех хаток
///
script
HatRel = js1.B22 and js1.b23 and js1.b24;
SEQUENCE
WAIT(not HatRel); // если любой из hat отклонён
shift = js1.b2; // Запоминаем состояние Shift1 (по кнопке JB2)
ENDSEQUENCE
//
If (shift) Then
cms.b9 = js1.b9; // hat2
cms.b10 = js1.b10; // hat2
cms.b11 = js1.b11; // hat2
cms.b12 = js1.b12; // hat2
cms.b13 = js1.b13; // hat3
cms.b14 = js1.b14; // hat3
cms.b15 = js1.b15; // hat3
cms.b16 = js1.b16; // hat3
cms.b17 = js1.b25; // hatPOV
cms.b18 = js1.b27; // hatPOV
cms.b19 = js1.b29; // hatPOV
cms.b20 = js1.b31; // hatPOV
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;
cms.b21 = js1.b25;
cms.b22 = js1.b27;
cms.b23 = js1.b29;
cms.b24 = js1.b31;
Endif
If( 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; // контроль нажатия/отпускания хаток
SEQUENCE
WAIT( 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 // действия если активен шифт1
cms.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;
else
If (shift2) then // действия если активен шифт2
cms.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;
else
If (shift3) then // действия если активен шифт3
cms.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;
Endif
Endif
Endif
If( js1.B22 and js1.b23) then // если все hat отпущены
shift1 = false; // Сбрасываем "нажатие" Shift1
Endif
//
endscript

 

 

Комплект файлов Shift_3_On_Hat 

 

Shift_On_3_Hat.zip

Shift_3_On_Hat.zip

Изменено пользователем =J13=Moroka
  • Поддерживаю! 1
Опубликовано: (изменено)

...Вы будете смеяться, но случайно обнаружил, что эти алгоритмы можно ещё упростить :):coffee:

Последняя проверка а-ля "Все кнопки отпустили" не нужна!

т.е. общая картина выглядит так:

SEQUENCE

WAIT(Что-то нажали); // Как только что-то из рабочих кнопок/хаток нажали
ФлагШифта = Кнопка__Для_Шифта; // Запоминаем состояние Кнопка__Для_Шифта на этот момент
ENDSEQUENCE
//Потом, собственно пользуемся плодами...
IF (ФлагШифта был нажат) THEN
команда1 с шифтом
команда2 с шифтом
......
командаN с шифтом
ELSE // ...а если ФлагШифта был не нажат
команда1 без шифта
команда2 без шифта
......
командаN без шифта
ENDIF
IF (Все_кнопки_отпустили) THEN // кончаем!!!
ФлагШифта = False; // сбрасываем т.е.
ENDIF

 

Прикрепил исправленные файлы...

 

ПыСы: Это ж надо было неделю во все это смотреть, чтобы только сейчас обнаружить :)...

Shift_On_3_Hat.zip

Shift_3_On_Hat.zip

Изменено пользователем =J13=Moroka
  • Поддерживаю! 1
Опубликовано: (изменено)

Не понял, только, зачем делать отдельный SEQUENCE, когда узнать, в каком кнопка положении нужно только один раз за проход. Не проще ли так:

%DEFINE Shift   JS1.B4   
script
   if ( Shift )
       ....
   else
       ....
   endif
endscript

sequence, по-мне, так нужен только тогда, когда нужно обсчитывать что-то непрерывно изменяющееся, например движение оси с кнопки (пока нажато, то....), но при этом нужна специфическая задержка, а основноый скрипт задерживать нельзя. Например ось с кнопки в основной последовательности двигается слишком быстро, нужна задержка. Или, например, мигание АНО со скоростью 10 раз в секунду... :)... нужна задержка. Или, например, удержание кнопки определённое время (полный выход закрылок на ЛаГГе -- около 10 секунд).

В остальных случаях, когда надо просто отследить, нажато ли то, или это, в данном конкретном проходе, совершенно не нужен sequence. Более того, на sequence наложен ряд ограничений, например он не может находится в блоке if...endif, его сложнее отлаживать и проч.

Изменено пользователем 72AG_terror
  • Поддерживаю! 1
Опубликовано: (изменено)

Не понял, только, зачем делать отдельный SEQUENCE, когда узнать, в каком кнопка положении нужно только один раз за проход. Не проще ли так:

...В остальных случаях, когда надо просто отследить, нажато ли то, или это, в данном конкретном проходе, совершенно не нужен sequence...

Безусловно, с IF...THEN...ELSE можно обрабатывать шифты...  Но это будут неправильные пчелы шифты! Логика будет обрабатываться каждый проход ,хотя нам нужно только один раз, при нажатии хатки. Возможны ошибки: отпустил шифт раньше основной кнопки - сработала команда "без шифта" Нажал "случайно" шифт после основной кнопки - сработала "с шифтом"... и вот, вместо выпуска шасси ты катапультируешься :)

В случае SEQUENCE...WAIT...ENDSEQUENCE последовательность срабатывает один раз при появлении условия.... то, что надо!

 

...и, ещё... Terror, стало интересно 

  1. "Электротриммирование" по всем осям: с сохранением полного диапазона отклонений, как на Ка-50: нажал кнопку -- ручка (и педали) запомнили, где они (центр смещается), при этом сохраняется полный диапазон отклонения (scaling оси). Коррекция электротриммирования РУСа и педалей по пипке на РУСе. Игровыми триммерами можно вообще после этого не пользоваться + появляются "триммера" там, где их нет (РН на мессе и проч.) + возможность мгновенно затриммировать вираж.

Вылажи, пожалуйста, если найдешь время, с краткими коментами...

Изменено пользователем =J13=Moroka
Опубликовано:

Безусловно, с IF...THEN...ELSE можно обрабатывать шифты...  Но это будут неправильные пчелы шифты! Логика будет обрабатываться каждый проход ,хотя нам нужно только один раз, при нажатии хатки. Возможны ошибки: отпустил шифт раньше основной кнопки - сработала команда "без шифта" Нажал "случайно" шифт после основной кнопки - сработала "с шифтом"... и вот, вместо выпуска шасси ты катапультируешься :)

В случае SEQUENCE...WAIT...ENDSEQUENCE последовательность срабатывает один раз при появлении условия.... то, что надо!

Хм! Это интересно, может, я неправильно понимаю логику работы нашего скриптера: я так понимаю, что он обсчитывает все кнопки сразу до начала прохода. Грубо говоря, скрипт смотрит, какая кнопка нажата, не в момент if ... then, а ещё до script ... endscript. То есть кнопка весь скрипт или нажата, или нет и не может изменить своего статуса в процессе исполнения. Или же имеется ввиду ситуация: нажал Ctrl-Del, потом случайно нажал Alt?

 

Электротрим постараюсь сегодня прислать.

Опубликовано: (изменено)

Фиксированные значения на микростике 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-MJoy
SCRIPT
a1 = 2*(js1.a2-127); // Расчет для 1-й половина хода по оси Y
a2 = 2*js1.a2; // Расчет для 2-й половина хода по оси Y
a3 = 2*(js1.a1-127); // -"- по оси X
a4 = 2*js1.a1; // -"- по оси X
//
IF (NOT(js1.b2 OR js1.b3 OR js1.b4)) THEN // Если ни одна из кнопок не нажата
IF ([a3 > cms.a1]) THEN // То управляем осью cms.a1
cms.a1 = a3;
ENDIF
IF ([a4 < cms.a1]) THEN
cms.a1 = a4;
ENDIF
ENDIF
IF (js1.b2) THEN // Если нажата В2
IF ([a1 > cms.a2]) THEN // То управляем осью cms.a2
cms.a2 = a1;
ENDIF
IF ([a2 < cms.a2]) THEN
cms.a2 = a2;
ENDIF
ENDIF
IF (js1.b3) THEN // Если нажата В3
IF ([a1 > cms.a3]) THEN // То управляем осью cms.a3
cms.a3 = a1;
ENDIF
IF ([a2 < cms.a3]) THEN
cms.a3 = a2;
ENDIF
ENDIF
IF (js1.b4) THEN // Если нажата В4
IF ([a1 > cms.a4]) THEN // То управляем осью cms.a4
cms.a4 = a1;
ENDIF
IF ([a2 < cms.a4]) THEN
cms.a4 = a2;
ENDIF
ENDIF
ENDSCRIPT

 

 

Для наблюдения результата отвяжите в 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

Изменено пользователем =J13=Moroka
Опубликовано:

Хм! Это интересно, может, я неправильно понимаю логику работы нашего скриптера: я так понимаю, что он обсчитывает все кнопки сразу до начала прохода. Грубо говоря, скрипт смотрит, какая кнопка нажата, не в момент if ... then, а ещё до script ... endscript. То есть кнопка весь скрипт или нажата, или нет и не может изменить своего статуса в процессе исполнения. Или же имеется ввиду ситуация: нажал Ctrl-Del, потом случайно нажал Alt?

 

Ты правильно полагаешь. Текущий статус физ кнопок он смотрит еще до начала скрипта.

Цикл работы следующий (из хелпа)

1) Опрашиваются все устройства и определяются статусы физических кнопок и осей

2) Производятся операции предусмотренные скриптом и формируются статусы и значения для осей и кнопок CMS

3) Статус осей и кнопок CMS передается в OS с учетом модификаций предусмотренных в GUI (посылаются коды клавиш, последовательностей, значений осей, движений мыши)

4) Снова переход на п. 1 - и так по кругу, бесконечно.

Опубликовано: (изменено)

Чего-то с продавцом с Ебея опять не получается связаться.

Зато вот что нашёл:

http://www.res-rich.com/chproducts_com/www.chproducts.com/shop/parts.html

Только не ясно как заказать-то..

 

 

Я так понимаю писать, звонить сюда:

post-4254-0-72181500-1409337227_thumb.gif

 

Если это все не устарело.    Хм... А ведь это копия странички старого CH магазина :)   

 

Хотя, видимо они специально и дали это маленькое окошко с контактной информацией поверх странички :)  Напишешь сам? Или мне написать?

Изменено пользователем [I.B.]Zulu
Опубликовано: (изменено)

Да,там в этом правом маленьком окне ссылка на китайский сайт с иероглифами :)Полазил там,резисторов не нашёл...

 

ЗЫ: Вот эта фирма-производитель резисторов-

http://www.ctscorp.com/default.htm ?

 

Напишешь сам? Или мне написать?

 

Напиши.Переведут на свои иероглифы переводчиком:)

Изменено пользователем =DF=Metr
Опубликовано:

Я на английском напишу :)  На нем то они без гугла работають :)

Опубликовано:

Вот так выглядит электротриммирование:

 

//  ****************
//  "Электротриммирование" действует следующим образом: когда мы отклоняем ручку и нажимаем кнопку триммирования,
//      скрипт запоминает положение ручки и считает это положение новым центром. Дальше все движения ручки происходят
//      от этого нового центра. Что это даёт: игра считает, что ручка постоянно отклонена на какую-то величину.
//      Таким образом мы добиваемся работы триммеров аналогично современным самолётам: триммируется не рулевая
//      поверхность, а тупо сдвигается ручка туда или сюда и удерживается в таком положении, а для лётчика это
//      становится новым "центром" ручки.
//
//      Собственно триммирование осуществляется двумя способами:
//          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
Опубликовано: (изменено)

Спасибо! Утащил. (Хочу к бомберу приделать...)

Спасибо, что "разжевал" подробно... но чувствую вопросы будут...   ;)

Изменено пользователем =J13=Moroka
Опубликовано: (изменено)

Вот так выглядит электротриммирование:...

Ура! Все отлично работает. 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
Изменено пользователем =J13=Moroka

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
×
×
  • Создать...