PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Резистивные кнопки (http://pccar.ru/forumdisplay.php?f=165)
-   -   подрулевые renault scenic II в LPT (http://pccar.ru/showthread.php?t=4747)

Димон 16.03.2008 02:20

подрулевые renault scenic II в LPT
 
Цитата:

Сообщение от doctor
Форумчане, помогите пожалуйста подключить правильно к LPT-порту кнопки подрулевого управления моей машины (renault scenic II). Самому удалось правильно подключить только 2 кнопки (громкости) из 8 возможных функций, реализуемых 5-ю кнопками и одним колёсиком с двухсторонним вращением и нажатием. Кнопки простейшие, работающие по принципу замыкания/размыкания цепи безо всяких сопротивлений (до оцифровывающего блока). Проблема в том, что 6 контактов разъёма подрулевого пульта управления аудиосистемой (удалена), замыкаются кнопками попарно в виде матрицы, т.е. без общего провода для всех кнопок.
Присоединяю маленький файлик с таблицей функций.

http://forum.pccar.ru/attachment.php...6&d=1205739058 http://forum.pccar.ru/attachment.php...1&d=1205772915

Цитата:

Сообщение от doctor
2 контакта попарно замыкающие при вращении площадки: 1-2, 1-3, 1-4, 1-5, 1-6 или 1-7. При этом звонятся тестером (соеденены дорожками) контакты 2-5, 3-6 и 4-7. А нажатие на колёсико реализовано отдельной кнопкой.

Предлагаю раскомутировать через три оптрона. При нажатии какой-либо из кнопок ток начинает течь только из одной из ножек (765) матрицы т.е. лпт чует задействованую строку, оттуда ток уходит в землю, но на-последок проходит через оптрон. А у оптронов выходы идут в ножки (234) и лпт так чует задействованный столбец матрицы, т.е. при любом нажатии ток начинает течь через две ножки. И всегда разные.

Распиновку лпт смотреть в начале темы "управляем громкостью" и "устройства ввода через LPT" где были драйвера джойстика атари. Тамже отличный рабочий скрипт Hamstera и Co, в который надо будет внести соотвт. изменения. Для редактирования скрипта понадобится autohotkey.com, заодно можно скомпилить независимый ехешник.

Вот картинки, вторая картинка - это mute, когда в лпт ток начинает течь через 6 и 4 ножки.

http://forum.pccar.ru/attachment.php...7&d=1205739107 http://forum.pccar.ru/attachment.php...8&d=1205739159 http://forum.pccar.ru/attachment.php...9&d=1205739208

Оптроны предпочитаю первыепопашиеся, обычно попадаются выпаянные из сгоревшего БП 220в.

Эскиз скрипта ahk:
Код:

Весь скрипт пишется методом подставленя к кнопкам виртуального
жостика например кнопок виртуальной клавиатуры (может даже медийных).
Нужно определиться с фронтендом-списком команд т.к. под RR и его семейства
winamp-based-programs проще посылать wm-commands. В ICT и другим
media-player-based программах логичнее использовать кнопки медийной
клавиатуры (виртуально конечно)

Скрипт колесика чуть сложнеее, но тоже независит от времени-циклов.
При пуске скрипта опрашивается 6-7-8 контакты и текущее значение
заносится в переменную, напр. n:=8. Затем, при написании действий кнопок
жостика 6-7-8 пишутся такие строчи:

При нажатии кнопки 6:
1. Посмотреть переменню n.
2. Если она 7, то нажать курсор вверх.
3. Если она 8, то нажать курсор вниз.
4. Переменной n присвоить значени := 6

При нажатии кнопки 7:
1. Посмотреть переменню n.
2. Если она 8, то нажать курсор вверх.
3. Если она 6, то нажать курсор вниз.
4. Переменной n присвоить значени := 7

При нажатии кнопки 8:
1. Посмотреть переменню n.
2. Если она 6, то нажать курсор вверх.
3. Если она 7, то нажать курсор вниз.
4. Переменной n присвоить значени := 8

Таким образом колесико будет построчно листать списки курсорами вверх-вниз,
независимо от скорости lptпорта принципов действия енкодеров и жизни на марсе


doctor 16.03.2008 02:57

Спасибо за помощь! Но картинок что-то не видно.

Dmitry(C) 16.03.2008 23:52

Может быть такую штуку попробовать http://indashpc.org/new/adapters/car2pc-ren.html ?

archer 17.03.2008 02:19

Я не видит!

Красивое решение... а скрипт тработает нажатие 2 кнопок одновременно?

doctor 17.03.2008 11:15

to Dmitry(C):

красивое решение, знаю о нём, но реализуется только при одновременном наличии компа и штатного audio в машине, а у меня последнее удалено.

Димон 17.03.2008 11:33

Вложений: 4
Да, в скрипте, в трочках запуска медийных функций пишется условие из двух нажатых кнопок жостика-lpt. Перекладываю картинки.

doctor 17.03.2008 11:52

to Dimon:

Здорово придумано! картинки ажно завораживают своей футуристичностью.
Обнаружилась одна проблема... после разбора кнопочного блока, выявлено, что в отличии от кнопок, замыкающих цепи только при нажатии, колёсико всегда находится в состоянии замыкания одной из трёх пары контактов, и получается, что функции реализовывались (когда стояла магнитола) при переходе с одной цепи не другую, оставляя их всегда замкнутыми! А ведь для LPT-порта наверно не должно быть состояние с постоянно замкнутыми контактами?

archer 17.03.2008 12:16

У тебя колесико - энкодер!
там два контакта замыкаются со смещением на 90 град...
т.е.
10-00-01-11-10 - вперед
10-11-01-00-10 - назад

это дело подключается и через LPT - мы с Wanted-ом пытались это реализовать и даже скрипт рабочий был написан, но скорости опроса lpt не хватает и потому полно ложных срабатываний!

В конце концов пришли к выводу, что распотрошить клаву с энкодером громкости проще. Если есть желание почитай тему про энкодеры - там были схемы подключения - это на случай, если энкодер треба не на громкость вешать.

Димон 17.03.2008 12:30

А скрипт был циклический с опросом? кмк если отрабатывать событие joybutton то получится лучше чем в цикле смотреть getjoybuttonstate.

А насчет недостаточно скорости lpt-порта довольно сложно убедить человека, паявшего covox во времена когда soundblasterов еще не было.

http://en.wikipedia.org/wiki/Covox_Speech_Thing - прослезился :blush: .

ps. А lpt порту как и жостику без разницы, вечно-замкнутые ножки или вечно-разомкнутые. Это вам не клавный контролер, который при залипшей кнопке генерит тучу букв.

pps. Еще есть подозрение что это не энкодер, или энкодер трехпроводной.

archer 17.03.2008 13:14

ну не знаю! Дим где ты был, когда мы с Пашей мучались?

Реально быстро прокрученный энкодер давал дерганье ползунка громкости вверх-вниз, а иногда и в обратном направлении.

Вот наша тема:
http://www.pccar.ru/showthread.php?t=1685

Димон 17.03.2008 13:40

Если ты о скрипте, которые лежит тут:
http://www.pccar.ru/showpost.php?p=17314&postcount=25
то да, там именно цикл, именно с опросом. кмк работать должен с ошибками.

Где я был? Незнаю где я был. да и энкодеров у меня нету нигде, но принцип у них зачотный адназначна.

2doctor. Значит в таблице три колесика, там наверное два провода от вращения энкодера, а третий - нажатие на колесико?

doctor 17.03.2008 20:57

Вложений: 1
2 контакта попарно замыкающие при вращении площадки: 1-2, 1-3, 1-4, 1-5, 1-6 или 1-7. При этом звонятся тестером (соеденены дорожками) контакты 2-5, 3-6 и 4-7. А нажатие на колёсико реализовано отдельной кнопкой.

Димон 17.03.2008 21:40

Это что, еще один шмоток проводов на колесико? 7 проводов? Или както с первыми шестью пересекаюцца?

doctor 17.03.2008 21:56

Нет, только 6 проводов, в соответствии с таблицей.
На самом разъёме 18 контактов, но остальные, по технической ноте, отвечают за дворники и т.д.
На плате - контактные площадки, дорожки и из электронных элементов только цепочка из приблизительно 8 кажется диодов (наверно это диодная матрица). Может она всё и организует?

archer 17.03.2008 22:04

ниче не понятно!
Классический энкодер - 3 провода: земля и 2 контактных. = 2 переключателя, которые комбинацией нолей(выкл) и единиц(вкл) - указывают направление вращения, обычно 1 щелчек - это 2 переключения, что достаточно для определения направления вращения, хотя бывают и безщелчковые, и как у меня - 1 щелчек-1 переключение, мне для сдвига вперед или назад надо сделать 2 щелчка.

Ищи 3 провода с энкодера или распиши, где на твоей матрице выходят комбинация на "щелчки" энкодера? - проверяется подключил пару контактов подозреваемую и крути колесо - если последовательно идут 0-0-1-1 значит это оно!
А я проверял энкодер подключив светодиоды через него и он наглядно показывает нули и единицы парой диодов.:) Если кнопочки энкодера найдутся, о делаешь Димонову схему, а в контактах, которые энкодерные используешь Пашин скрипт, или модифицируй его по совету Димона.

Димон 17.03.2008 22:08

нету ту никаких энкодеров, забудте. Даже принцип действия другой. проще и надежнее.

Если попарно закорочены, значит три получается. Итого имеем 6 в первой матрице и три с калесика. В лпт можно использовать 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 и 13.

зы. или три с калесика 7-6-5 это и есть та самая крутилка? которая работает при прохождении тока через 4??? Короче скрипт колесичный надо писать, и не луповский ибо от времени независит.

archer 17.03.2008 22:12

как мне кажется в нижнем ряду матрицы 1 кнопка - нажатие, а две остальные от энкодера - проверь плиз!

doctor 17.03.2008 22:20

нет, нажатие колёсика это то что в таблице - подтверждение - отдельная кнопка прижимаемая ободом.

2Dimon
и колёсико и кнопки - на выходе только 6 контактов

doctor 17.03.2008 22:23

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

Димон 18.03.2008 00:56

Ничего странного, все просто и логично (начинает нравиться рено). Просто на две функции "колесико тудымс" и "колесико сюдымс" задействовано три провода, остальные поодному.

Конструкция скрипта не требует циклических опросов. ПРосто старый скрипт был заточен под работу с резистивными подрулевыми и осевыми жостиками с потенциометрами, где не было событий, надо было лазить и смотреть значение по оси Х.

Здесь ситуация другая, на любое нажатие есть событие вида "joybutton2" т.е. нажатие кнопки-замыкание контактов. Тут какраз уместно использовать именно lpt порт, у которого толком нет осей, зато куча кнопок.

Весь скрипт пишется методом подставленя к кнопкам виртуального жостика например кнопок виртуальной клавиатуры (может даже медийных). Нужно определиться с фронтендом-списком команд т.к. под RR и его семейства winamp-based-programs проще посылать wm-commands. В ICT и другим media-player-based программах логичнее использовать кнопки медийной клавиатуры (виртуально конечно)

Скрипт колесика чуть сложнеее, но тоже независит от времени-циклов. При пуске скрипта опрашивается 6-7-8 контакты и текущее значение заносится в переменную, напр. n:=8. Затем, при написании действий кнопок жостика 6-7-8 пишутся такие строчи:

При нажатии кнопки 6:
1. Посмотреть переменню n.
2. Если она 7, то нажать курсор вверх.
3. Если она 8, то нажать курсор вниз.
4. Переменной n присвоить значени := 6

При нажатии кнопки 7:
1. Посмотреть переменню n.
2. Если она 8, то нажать курсор вверх.
3. Если она 6, то нажать курсор вниз.
4. Переменной n присвоить значени := 7

При нажатии кнопки 8:
1. Посмотреть переменню n.
2. Если она 6, то нажать курсор вверх.
3. Если она 7, то нажать курсор вниз.
4. Переменной n присвоить значени := 8

Таким образом колесико будет построчно листать списки курсорами вверх-вниз, независимо от скорости lpt-порта, принципов действия енкодеров и жизни на марсе. :)

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

doctor 18.03.2008 18:42

значит коммутация делается на шести выводах через три оптрона в соответствии со схемами и на LPT, а скрипт пишется по вышеизложенному принципу?

Димон 18.03.2008 18:46

поидее да. Я не вижу причин чтобы это все незаработало или как можно сделать проще. Надо еще проверить в какую сторону диоды стоят, может придется при распайке матрицы поменять столбцы с рядами. Написание скрипта в ahk вполне посилам непрограммеру т.к. там куча примеров. Да, на аглицком хелп и примеры круче намного.

doctor 18.03.2008 18:52

Спасибо!!!
Буду ваять.

doctor 21.03.2008 17:30

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

Димон 21.03.2008 17:41

Код:

joy1::
  loop
  {
      GetKeyState, j1, joy1
      if j1=U
    {
      exit
    }
    if a_index != 2
      {
      SoundSet, +4, wave
      }
    sleep 100
    }
return
joy2::
  loop
  {
      GetKeyState, j2, joy2
      if j2=U
    {
      exit
    }
    if a_index != 2
      {
      SoundSet, -4, wave
      }
    sleep 100
    }
return

Каждую десятую секунды прибавляет 4% к громкости, только не master volume, а wave (в миксере вторая колонка). Когда тыкаешь - видно.

Вообще баян, отсюда: http://forum.pccar.ru/showpost.php?p=2784&postcount=27

Вот еще нашел:
Цитата:

Сообщение от Димон (Сообщение 26479)
Читать бесполезно, про это нигде не написано. Вся программа переделана на цыкл, который запускается по событию "нажатие кнопки". В каждой итерации снимаю по 4% и проверяю "не нажата-ли кнопка". Если вдруг выясняется что "она не нажата" то цыкл рву. Другого метода имхо нет т.к. в жостике нет события "button up", есть только "check state"


doctor 21.03.2008 17:59

...if j2=U...
U значит нажата кнопка?
а как ...if a_index != 2... это расшифровывается?

Димон 21.03.2008 19:52

Цитата:

Сообщение от мануал ahk
GetKeyState, OutputVar, KeyName [, Mode]
KeyIsDown := GetKeyState("KeyName" [, "Mode"])

Parameters

OutputVar The name of the variable in which to store the retrieved key state, which is either D for down or U for up (but the GetKeyState() function returns true (1) for down and false (0) for up). The variable will be empty (blank) if the state of the key could not be determined.

Что, серьезно есть намерения написать скрипт нечитая мануал? Круто кмк. :blink2:

doctor 21.03.2008 22:05

конечно же нет!
этим и занимаюсь в свободное от работы и сна время. Просто быстрее хотелось разобраться в уже написанном скрипте с помощью самого автора.

Димон 21.03.2008 22:17

Вложений: 1
Я уже плоховато помню детали. Там примеры познавательные, они читаются и компонуются. Мутновато написано, но разобраться можно. аиндекс может рудимент из чьегото чужого скрипта. Надо макетик делать из двух кнопок и смотреть как работает. Коробочки от тик-так рулят :)

Комутация: у кнопочек общий провод идет в 18пин лпт, а два оставшихся у двух кнопочек на 2 и 3.

doctor 21.03.2008 23:01

Спасибо!
Я не плохо владею паяльником, но по электронике знания сугубо начальные. Но ничего - одолею вопрос.

archer 21.03.2008 23:22

Цитата:

Сообщение от Димон (Сообщение 56711)
Коробочки от тик-так рулят :)

Дим, ты даже тут в коробульку засунул... У меня все проще - тока папа коннектор с пучком проводов и подпаивался я тока 1 раз - когда энкодер мучал. А кнопочки просто проводками эмулирую :)

Димон 21.03.2008 23:49

Не, у меня спец-девайс для отладки скриптов. Комп при этом не всегда под рукой, а иногда и далеко запихнут, поэтому провод. Коробочка с кнопками потому, что я ее еще и давал попользоваться тут любителям ahkшных скриптов на время написания. Они когда заканчивают инсталяцию чистовых кнопок - мне назад коробочку отдают и уже не так над ней смеюццо.
:smile1:

doctor 21.03.2008 23:49

Дима, а эти смещения строк в скриптах только для удобства восприятия функциональных блоков? Можно каждую строку и с начала абзаца писать?

Димон 22.03.2008 00:14

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

doctor 23.03.2008 16:24

Дима, здравствуйте. Если возможно, помогите. Третий день не получается правильно реализовать в скрипте вроди бы простую конструкцию: если запущен процесс winamp.exe, то убить его при запуске GoTView.exe, и наоборот, если запущен тюнер, то выгрузить его при запуске winamp. Почему то работает только одно условие.


Часовой пояс GMT +4, время: 16:23.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot