PDA

Просмотр полной версии : Sony RM-X4S + girder как настроить?


ubazza
28.03.2007, 10:50
скачал плагин для GIRDERA отсюда http://homepages.uc.edu/~wagnerrp/
добавил в игровые устройства джойстик с двумя осями.

а гирдер понимает только два кода.
J0:A0:A и J0:A1:A .
___
может кто расскажет особенности настройки, или может я не тот плагин пользую?
под вин амп плагин не предлагать (он работает нормально)
:dntknw:
_________
законектил по этой схеме
http://freeweb.supereva.com/dmc.freeweb/input.htm?p

Don_ik_kot
28.03.2007, 11:09
скачал плагин для GIRDERA отсюда http://homepages.uc.edu/~wagnerrp/
добавил в игровые устройства джойстик с двумя осями.

а гирдер понимает только два кода.
J0:A0:A и J0:A1:A .
___
может кто расскажет особенности настройки, или может я не тот плагин пользую?
под вин амп плагин не предлагать (он работает нормально)
:dntknw:

в инихах прописываешь 2 оси, а все команды зашиваешь по одной. по-моему плагин не тот. насколько я знаю, этот джой на ура женится через AHK

ubazza
28.03.2007, 11:17
в инихах прописываешь 2 оси, а все команды зашиваешь по одной. по-моему плагин не тот. насколько я знаю, этот джой на ура женится через AHK

а хотябы название плагина подскажи, это от Wagnera.
Я пользую girder 4 , уточни в каких ini файлах и что поконктренее надо прописать. Зарание спасибо.

Hamster
28.03.2007, 12:45
Я пытался заставить гирдер работать с этим жостиком. Пробовал 2 или 3 плагина - все пофиг. Почти так же как и у тебя - читает тока один код.

Короче, забил на гирдер и написал скрипт на AutoHotKey.

ubazza
28.03.2007, 12:57
Я пытался заставить гирдер работать с этим жостиком. Пробовал 2 или 3 плагина - все пофиг. Почти так же как и у тебя - читает тока один код.

Короче, забил на гирдер и написал скрипт на AutoHotKey.

тааак. вот это уже ближе к истине )))
а примерчики скирптов для аутохоткея не накидаеш?

lvovitch
28.03.2007, 13:12
Я пытался заставить гирдер работать с этим жостиком. Пробовал 2 или 3 плагина - все пофиг. Почти так же как и у тебя - читает тока один код.

Короче, забил на гирдер и написал скрипт на AutoHotKey.

+1000 Автохоткей рулит! :bye:

Hamster
28.03.2007, 13:21
тааак. вот это уже ближе к истине )))
а примерчики скирптов для аутохоткея не накидаеш?

В машине примерчики.
2Lvovich - если у тебя под рукой есть тот скрипт, пихни плииз!
Если нет - вечером тады.

З.Ы. На форуме где-то кидал уже пример скрипта. Так вот, он неверный! :)

ubazza
28.03.2007, 13:27
В машине примерчики.
2Lvovich - если у тебя под рукой есть тот скрипт, пихни плииз!
Если нет - вечером тады.

З.Ы. На форуме где-то кидал уже пример скрипта. Так вот, он неверный! :)

ага понял.. (форум листать не буду)
жду вечера.

lvovitch
28.03.2007, 13:38
Вот он - код вечного счастья, который я обрел :) :) :) еще раз выражаю бесконечную благодарность всемогущему Хамстеру!!! :) :) :)

; Скрипт для подключения автомобильного двойстика Sony X4S к CarPc
; *********************** Секция настроек начало ***********************
JoystickNumber = 1
VolumeStep = 5
; Погрешность определения значений
KeyGetDelta = 2
; Значения кнопок
JKey_OFF = 100
JKey_ATT = 92
JKey_X1 = 66
JKey_X2 = 62
JKey_X3 = 88
JKey_PREV = 84
JKey_NEXT = 80
JKey_VOLD = 75
JKey_VOLU = 70
JKey_SOURCE = 97
; Переменная в которой запоминаем громкость (для Mute)
MUTE_SOUND = 0
; *********************** Секция настроек конец ***********************

#SingleInstance
SetFormat, float, 03 ; Omit decimal point from axis position percentages.

; Читаем инфу по жостику. Пока с ней ничего не делаем
GetKeyState, joy_buttons, %JoystickNumber%JoyButtons
GetKeyState, joy_name, %JoystickNumber%JoyName
GetKeyState, joy_info, %JoystickNumber%JoyInfo

SoundGet, MUTE_SOUND
Loop
{
; Читаем состояние кнопок. Если кнопарь нажат, то переменная button(№кнопки)= D
Loop, %joy_buttons%
{
GetKeyState, button%a_index%, %JoystickNumber%joy%a_index%
}

; Читаем показания оси Х - по сути основных кнопок жостика
GetKeyState, joyx, %JoystickNumber%JoyX

; Читаем мышиный скролл (пока не пользуем)
; GetKeyState, mouse_Down, WheelDown
; GetKeyState, mouse_Up, WheelUp

; Генерим нужные действия:

; изменение громкости - меньше

If joyx-KeyGetDelta <= JKey_VOLD and joyx+KeyGetDelta >= JKey_VOLD
{
SoundSet -VolumeStep
}

; изменение громкости - больше
If joyx-KeyGetDelta <= JKey_VOLU and joyx+KeyGetDelta >= JKey_VOLU
{
SoundSet +VolumeStep
}

; JKey_X1
If joyx-KeyGetDelta <= JKey_X1 and joyx+KeyGetDelta >= JKey_X1
{
}

; JKey_OFF
If joyx-KeyGetDelta <= JKey_OFF and joyx+KeyGetDelta >= JKey_OFF
{
; Действие на JKey_OFF
}


; JKey_ATT
If joyx-KeyGetDelta <= JKey_ATT and joyx+KeyGetDelta >= JKey_ATT
{
; Действие на JKey_ATT
SoundGet, Tmp
If Tmp = 0 ;мы в режиме MUTE
{
SoundSet, MUTE_SOUND
}
Else
{
SoundGet, MUTE_SOUND
SoundSet, 0
}

}


; JKey_X2
If joyx-KeyGetDelta <= JKey_X2 and joyx+KeyGetDelta >= JKey_X2
{
; Действие на JKey_X2
WinActivate ahk_class Winamp v1.x
Send c
}

; JKey_X3
If joyx-KeyGetDelta <= JKey_X3 and joyx+KeyGetDelta >= JKey_X3
{
; Действие на JKey_X3
}

; JKey_PREV
If joyx-KeyGetDelta <= JKey_PREV and joyx+KeyGetDelta >= JKey_PREV
{
; Действие на JKey_PREV
WinActivate ahk_class Winamp v1.x
Send z
}

; JKey_NEXT
If joyx-KeyGetDelta <= JKey_NEXT and joyx+KeyGetDelta >= JKey_NEXT
{
; Действие на JKey_NEXT
WinActivate ahk_class Winamp v1.x
Send b
}

; JKey_SOURCE
If joyx-KeyGetDelta <= JKey_SOURCE and joyx+KeyGetDelta >= JKey_SOURCE
{
; Действие на JKey_SOURCE
}

; Ждем 250 мс (0.25 сек)
Sleep, 250
}
return

Этот чудестный скриптия к доработал под РР (если - завтра могу скинуть, сейчас комп лежит под капельницей:) ). Теперь вместе с кнопкой Шифт у меня 17 кнопок!!!! :bye:

ubazza
28.03.2007, 13:58
Вот он - код вечного счастья, который я обрел :) :) :) еще раз выражаю бесконечную благодарность всемогущему Хамстеру!!! :) :) :)



Этот чудестный скриптия к доработал под РР (если - завтра могу скинуть, сейчас комп лежит под капельницей:) ). Теперь вместе с кнопкой Шифт у меня 17 кнопок!!!! :bye:

___
так. а подкючали вы джойстик по какой схеме к гейм порту?
и нужно ли в аутохоткее делать какието настройки.
я скрипт запускаю.... но никаких действий не происходит.

lvovitch
28.03.2007, 14:10
___
так. а подкючали вы джойстик по какой схеме к гейм порту?
и нужно ли в аутохоткее делать какието настройки.
я скрипт запускаю.... но никаких действий не происходит.

схема.... сейчас поищу...

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

lvovitch
28.03.2007, 14:16
Вообщем примерно так:

Схема - правильную кинуть не могу. Но здесь написал что и как: http://www.pccar.ru/showpost.php?p=13050&postcount=75 заодно и написал почему правильную кинуть не могу.

Что нужно сделать с автохоткеем: нужно запустить прогу из этого поста многоуважаемого Димона: http://pccar.ru/showpost.php?p=1374&postcount=15

потом запомнить циферки которые показывает ДжойТест при нажатии кнопочек и вписать их соотвественно в это место скрипта: ....Значения кнопок
JKey_OFF = 100
JKey_ATT = 92
JKey_X1 = 66
JKey_X2 = 62
JKey_X3 = 88
JKey_PREV = 84
JKey_NEXT = 80
JKey_VOLD = 75
JKey_VOLU = 70
JKey_SOURCE = 97
....

ubazza
28.03.2007, 15:36
Вообщем примерно так:

Схема - правильную кинуть не могу. Но здесь написал что и как: http://www.pccar.ru/showpost.php?p=13050&postcount=75 заодно и написал почему правильную кинуть не могу.

Что нужно сделать с автохоткеем: нужно запустить прогу из этого поста многоуважаемого Димона: http://pccar.ru/showpost.php?p=1374&postcount=15

потом запомнить циферки которые показывает ДжойТест при нажатии кнопочек и вписать их соотвественно в это место скрипта:

____
так програмку запустил.. она показывает кординаты оси Х и оси У
Например: Х027 У005, что вбивать? (или это и вбивать?)

ubazza
28.03.2007, 15:43
Вообщем примерно так:

Схема - правильную кинуть не могу. Но здесь написал что и как: http://www.pccar.ru/showpost.php?p=13050&postcount=75 заодно и написал почему правильную кинуть не могу.

Что нужно сделать с автохоткеем: нужно запустить прогу из этого поста многоуважаемого Димона: http://pccar.ru/showpost.php?p=1374&postcount=15

потом запомнить циферки которые показывает ДжойТест при нажатии кнопочек и вписать их соотвественно в это место скрипта:

да у вас подключение по той же схеме что и у меня (в в самом начале ссылка дана ние) человек там забыл один провдок указать.

lvovitch
28.03.2007, 16:04
____
так програмку запустил.. она показывает кординаты оси Х и оси У
Например: Х027 У005, что вбивать? (или это и вбивать?)

Значение координаты Х.

Т.е. если нажать кнопку, например громкость уменьшить, и джойтест показывает цифру 027 то ее надо вписать так: JKey_VOLD = 027

ubazza
28.03.2007, 16:07
Значение координаты Х.

Т.е. если нажать кнопку, например громкость уменьшить, и джойтест показывает цифру 027 то ее надо вписать так: JKey_VOLD = 027

при нажатии кнопок, у меня меняются значения только оси Y ось Х остается неизменной.

ubazza
28.03.2007, 16:08
Значение координаты Х.

Т.е. если нажать кнопку, например громкость уменьшить, и джойтест показывает цифру 027 то ее надо вписать так: JKey_VOLD = 027

щас секунд... (туплю) проводки перепаяю.

lvovitch
28.03.2007, 16:10
щас секунд... (туплю) проводки перепаяю.

Хочешь - пиши в асю, что бы оперативней было 296410893

mike
28.03.2007, 16:20
AHK - это универсальная программа для автоматизации AutoHotKey.
Про нее тут довольно хорошо расписано, поищи по названию.
Sorry за offtop!
А нет ли у кого рабочего crack-а или serial-а к Girder 4.0.14.0?
Скачал, настроил, все отлично работало, теперь требует key. В нете скачал несколько crack-ов для старых версий - не подходят!
Всем Удачи!

mike
28.03.2007, 16:27
Извините, немного тормознул - страницу не обновил перед ответом!

ubazza
28.03.2007, 16:29
AHK - это универсальная программа для автоматизации AutoHotKey.
Про нее тут довольно хорошо расписано, поищи по названию.
Sorry за offtop!
А нет ли у кого рабочего crack-а или serial-а к Girder 4.0.14.0?
Скачал, настроил, все отлично работало, теперь требует key. В нете скачал несколько crack-ов для старых версий - не подходят!
Всем Удачи!

дак ты гирдер настроил под этот пульт?
кряк есть. мыло дай вышлю

mike
29.03.2007, 15:26
to ubazza
Привет!
Я гирдер под ИК Pioneer нарульный настроил! Тоже классная весчь!
И AutoHotKey тоже использовал для смены папок в winAmp одним нажатием.
Вышли крэк пожалуйста на kutc собака mail.ru
Заранее благодарен!

ubazza
29.03.2007, 15:34
Я пытался заставить гирдер работать с этим жостиком. Пробовал 2 или 3 плагина - все пофиг. Почти так же как и у тебя - читает тока один код.

Короче, забил на гирдер и написал скрипт на AutoHotKey.
а не подскажите, по какой схемке вы ждойстик законнектили?
тоесть саму схемку бы увидеть.

Hamster
29.03.2007, 16:53
а не подскажите, по какой схемке вы ждойстик законнектили?
тоесть саму схемку бы увидеть.


Рисовать схемку тяжко, скажу на словах.
Во-первых, Game-порт есть? У меня просто не было, пришлось покупять жутко дорогой (300р) USB жостик, из него выдергивать контроллер и подрубать к нему жостик.
Если Game-порт есть, то без проблем, тыкаем (http://llg.cubic.org/tools/sonyrm/).

ubazza
29.03.2007, 16:57
Рисовать схемку тяжко, скажу на словах.
Во-первых, Game-порт есть? У меня просто не было, пришлось покупять жутко дорогой (300р) USB жостик, из него выдергивать контроллер и подрубать к нему жостик.
Если Game-порт есть, то без проблем, тыкаем (http://llg.cubic.org/tools/sonyrm/).

да гейм порт есть.
собирал на по этйо схемке. винда пишет что нету джойстика.
там никаких примудростей случаем нет?

Hamster
29.03.2007, 17:57
да гейм порт есть.
собирал на по этйо схемке. винда пишет что нету джойстика.
там никаких примудростей случаем нет?

1. Т.к. в винде минимальным вариантом могет быть жостик 2 оси, то на контакты гейм-порта, что отвечает за ось Y надо повесить какой-нить резюк номиналом 1-100 КОм.

2. Даже после этого винда может не увидеть жостик по одной простой причине - если ты не давишь кнопки на жостике, то в тот момент значение оси X (т.е. та, на которую ты по сути подключил жостик) равно 0. Точнее не 0, а NULL. И винда естессно нифига на найдет.

Попробуй находясь в окошке свойств джойстика понажимать кнопки жостика - наверняка увидишь, что винда скажет "Ок"

ubazza
29.03.2007, 18:32
1. Т.к. в винде минимальным вариантом могет быть жостик 2 оси, то на контакты гейм-порта, что отвечает за ось Y надо повесить какой-нить резюк номиналом 1-100 КОм.



можешь в схемке опказать куда сопроивление нужно повесить.
от даю схемку :-) (крестиком отметь :))) )

Pin Pin J
--- --- O
S GND 1 o---+------------------------------o 1 +5V Y
O | S
N | ,----o 2 BTN T
Y | +------+ | / I
S SHIFT 2 o---|-----------|4.73KO|---|/ BC547 C
T | +------+ |\ K
I | +-----+ | > P
C +--|120KO|--+ `----o 4 GND O
K +-----+ | R
AD 3 o---------------+------------------o 3 X-AXIS T

коряво она катко вышла.
вопщем отсюда схемка http://llg.cubic.org/tools/sonyrm/
скажи между какими пинами сопрот повесить.
Если я не ошибаюсь то на оси Х и так уже висит сопрот еще один нужен???

Hamster
29.03.2007, 18:51
Да, сорри - на ось Х ничо вешать не надо, там в схеме уже есть сопротивление.
На ось Y - это значить надо повесить резюк между +5V DC (pin1) и Joystick 1 - Y (Pin 6)

Вот тутова (http://pinouts.ru/Inputs/GameportPCMidi.shtml)можно посмотерть распиновку порта.

ubazza
29.03.2007, 18:58
Да, сорри - на ось Х ничо вешать не надо, там в схеме уже есть сопротивление.
На ось Y - это значить надо повесить резюк между +5V DC (pin1) и Joystick 1 - Y (Pin 6)

Вот тутова (http://pinouts.ru/Inputs/GameportPCMidi.shtml)можно посмотерть распиновку порта.

))) ок, завтра если что, то стукнусь в аську.

ubazza
05.04.2007, 17:06
Схемы подключения джойстика Sony RM-X2S , Sony RM-X4S
http://llg.cubic.org/tools/sonyrm/ - повесить сопрот 120ко на 6,8 pin порта (в схеме не нарисовано) - ось х
вторая схема
http://freeweb.supereva.com/dmc.freeweb/?p - в схеме нет проводка от оси Х, на разъём подключения джойстика.
Там же лежит готовый софт под winamp (plugin)
__________________________________________________ ____________

Для настройки под другой софт потребуется программа autohotkey

Скрипт для управления сфтом.
; Скрипт для подключения автомобильного двойстика Sony X4S к CarPc
; *********************** Секция настроек начало ***********************
JoystickNumber = 1
VolumeStep = 5
; Погрешность определения значений
KeyGetDelta = 0.3
; Значения кнопок
JKey_OFF =
JKey_ATT = 1.82
JKey_X1 =
JKey_X2 = 2.6
JKey_X3 = 11.1
JKey_PREV = 3.4
JKey_NEXT = 4.6
JKey_VOLD = 6.2
JKey_VOLU = 8.2
JKey_SOURCE = 0.8
; Переменная в которой запоминаем громкость (для Mute)
MUTE_SOUND = 0
; *********************** Секция настроек конец ***********************

#SingleInstance
SetFormat, float, 0.1 ; Omit decimal point from axis position percentages.

; Читаем инфу по жостику. Пока с ней ничего не делаем
GetKeyState, joy_buttons, %JoystickNumber%JoyButtons
GetKeyState, joy_name, %JoystickNumber%JoyName
GetKeyState, joy_info, %JoystickNumber%JoyInfo

SoundGet, MUTE_SOUND
Loop
{
; Читаем состояние кнопок. Если кнопарь нажат, то переменная button(№кнопки)= D
Loop, %joy_buttons%
{
GetKeyState, button%a_index%, %JoystickNumber%joy%a_index%
}

; Читаем показания оси Х - по сути основных кнопок жостика
GetKeyState, joyx, %JoystickNumber%JoyX

; Читаем мышиный скролл (пока не пользуем)
; GetKeyState, mouse_Down, WheelDown
; GetKeyState, mouse_Up, WheelUp

; Генерим нужные действия:

; изменение громкости - меньше

If joyx-KeyGetDelta <= JKey_VOLD and joyx+KeyGetDelta >= JKey_VOLD
{
SoundSet -VolumeStep
}

; изменение громкости - больше
If joyx-KeyGetDelta <= JKey_VOLU and joyx+KeyGetDelta >= JKey_VOLU
{
SoundSet +VolumeStep
}

; JKey_X1
If joyx-KeyGetDelta <= JKey_X1 and joyx+KeyGetDelta >= JKey_X1
{
}

; JKey_OFF
If joyx-KeyGetDelta <= JKey_OFF and joyx+KeyGetDelta >= JKey_OFF
{
; Действие на JKey_OFF
}


; JKey_ATT
If joyx-KeyGetDelta <= JKey_ATT and joyx+KeyGetDelta >= JKey_ATT
{
; Действие на JKey_ATT
SoundGet, Tmp
If Tmp = 0 ;мы в режиме MUTE
{
SoundSet, MUTE_SOUND
}
Else
{
SoundGet, MUTE_SOUND
SoundSet, 0
}

}


; JKey_X2
If joyx-KeyGetDelta <= JKey_X2 and joyx+KeyGetDelta >= JKey_X2
{
; Действие на JKey_X2
WinActivate ahk_class E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8

Send !2
}

; JKey_X3
If joyx-KeyGetDelta <= JKey_X3 and joyx+KeyGetDelta >= JKey_X3
{
; Действие на JKey_X3
WinActivate ahk_class E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8

Send !5
}

; JKey_PREV
If joyx-KeyGetDelta <= JKey_PREV and joyx+KeyGetDelta >= JKey_PREV
{
; Действие на JKey_PREV
WinActivate ahk_class E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8
Send !1
}

; JKey_NEXT
If joyx-KeyGetDelta <= JKey_NEXT and joyx+KeyGetDelta >= JKey_NEXT
{
; Действие на JKey_NEXT
WinActivate ahk_class E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8
Send !3
}

; JKey_SOURCE
If joyx-KeyGetDelta <= JKey_SOURCE and joyx+KeyGetDelta >= JKey_SOURCE
{
; Действие на JKey_SOURCE
WinActivate ahk_class TForm1
Send {F11}
}

; Ждем 250 мс (0.25 сек)
Sleep, 250
}
return
__________________________________________________ _____________

а этот скрипт для опознания координат оси Х – те координаты которые нужно вбивать в превый скрипт.


; July 6, 2005: Added auto-detection of joystick number.
; May 8, 2005 : Fixed: JoyAxes is no longer queried as a means of
; detecting whether the joystick is connected. Some joysticks are
; gamepads and don't have even a single axis.

; If you want to unconditionally use a specific joystick number, change
; the following value from 0 to the number of the joystick (1-32).
; A value of 0 causes the joystick number to be auto-detected:
JoystickNumber = 1

; END OF CONFIG SECTION. Do not make changes below this point unless
; you wish to alter the basic functionality of the script.

; Auto-detect the joystick number if called for:
if JoystickNumber <= 0
{
Loop 32 ; Query each joystick number to find out which ones exist.
{
GetKeyState, JoyName, %A_Index%JoyName
if JoyName <>
{
JoystickNumber = %A_Index%
break
}
}
if JoystickNumber <= 0
{
MsgBox The system does not appear to have any joysticks.
ExitApp
}
}

#SingleInstance
SetFormat, float, 0.2 ; Omit decimal point from axis position percentages.
GetKeyState, joy_buttons, %JoystickNumber%JoyButtons
GetKeyState, joy_name, %JoystickNumber%JoyName
GetKeyState, joy_info, %JoystickNumber%JoyInfo
Loop
{
buttons_down = 0
Loop, %joy_buttons%
{
GetKeyState, joy%a_index%, %JoystickNumber%joy%a_index%
if joy%a_index% = D
buttons_down = %buttons_down%%a_space%%a_index%
}
GetKeyState, joyx, %JoystickNumber%JoyX
axis_info = X%joyx%
GetKeyState, joyy, %JoystickNumber%JoyY
axis_info = %axis_info%%a_space%%a_space%Y%joyy%
IfInString, joy_info, Z
{
GetKeyState, joyz, %JoystickNumber%JoyZ
axis_info = %axis_info%%a_space%%a_space%Z%joyz%
}
IfInString, joy_info, R
{
GetKeyState, joyr, %JoystickNumber%JoyR
axis_info = %axis_info%%a_space%%a_space%R%joyr%
}
IfInString, joy_info, U
{
GetKeyState, joyu, %JoystickNumber%JoyU
axis_info = %axis_info%%a_space%%a_space%U%joyu%
}
IfInString, joy_info, V
{
GetKeyState, joyv, %JoystickNumber%JoyV
axis_info = %axis_info%%a_space%%a_space%V%joyv%
}
IfInString, joy_info, P
{
GetKeyState, joyp, %JoystickNumber%JoyPOV
axis_info = %axis_info%%a_space%%a_space%POV%joyp%
}
ToolTip, %joy_name% (#%JoystickNumber%):`nJoy_info is:%joy_jnfo%`n%axis_info%`nButtons Down: %buttons_down%`n`n(right-click the tray icon to exit)
; Ждем 200 мс (0.2 сек)
Sleep, 200
}
return


__________________________________________________ ___________

Важные параметры.
float, 0.1 – в обоих скриптах ед. измерения (отображения знаков после точки) – для тех у кого координаты находятся близко.

PS: Большое Спасибо Hamster, Mike, за скрипты , помощь в сборе и советах. :blush:

ubazza
02.08.2007, 15:28
Рисовать схемку тяжко, скажу на словах.
Во-первых, Game-порт есть? У меня просто не было, пришлось покупять жутко дорогой (300р) USB жостик, из него выдергивать контроллер и подрубать к нему жостик.
Если Game-порт есть, то без проблем, тыкаем (http://llg.cubic.org/tools/sonyrm/).

приветствую, а можете рассказать как с джойстиком подружили пультик???

Hamster
02.08.2007, 18:14
приветствую, а можете рассказать как с джойстиком подружили пультик???

Не совсем понял вопрос. Что за пульт :) ?
Sony это и есть джойстик. Поскольку у меня нет на матери гейм порта, то для этого было сделано следующее:
- купил самый дешовый джойстик на USB
- расковырял его и вытащил контроллер. у контроллера вход это 3 оси с сопротивлениями и 2 кнопки (просто замыкание).
на одну ось повесил Sony, и на одну из кнопок повесил Shift у соньки.

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

ubazza
02.08.2007, 21:42
Не совсем понял вопрос. Что за пульт :) ?
Sony это и есть джойстик. Поскольку у меня нет на матери гейм порта, то для этого было сделано следующее:
- купил самый дешовый джойстик на USB
- расковырял его и вытащил контроллер. у контроллера вход это 3 оси с сопротивлениями и 2 кнопки (просто замыкание).
на одну ось повесил Sony, и на одну из кнопок повесил Shift у соньки.

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

а какой именно джойстик раздербанил?
брал штурвал... но там регулируемое сопротивления в самом джойстике + джойстик сони тоже кнопки все с сопротами... фигня получается..
взял геймпад ... там просто тупо только на замыкание работает.

Hamster
02.08.2007, 22:56
а какой именно джойстик раздербанил?
брал штурвал... но там регулируемое сопротивления в самом джойстике + джойстик сони тоже кнопки все с сопротами... фигня получается..
взял геймпад ... там просто тупо только на замыкание работает.

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

ubazza
03.08.2007, 09:11
геймпадl конечно отпадает. а вот чем не понравился штурвал то? вот, вместо его регулируемого сопротивления и надо втыкать соньку.

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

Hamster
04.08.2007, 01:22
штурвал не уводит на исходное место значение.
тоесть нажимаешь на кнопарь и он как бы остатся нажатым ,хотя физически ты его отпустил.

нифига не понял.... серьезно :)

ubazza
04.08.2007, 09:18
нифига не понял.... серьезно :)

какой джойстик брал? вспомни модель
я разобрал Genius F-23
подпаялся к оси Х и У координаты воспринимает но только в одну сторону (без нажатия он висит в координатах 0.0 ппосле нажатия он висит в координатах 120.0, нажимаешь еще одну клавишу перемещается на 67.0, тоесть после того как отпукаешь клавишу у меня не сатновится 0.0)
какието еще доделки делал?
___
Все разобрался... повесил два сопрота на ось Х и У по 100 и 50 ком.

Hamster
04.08.2007, 15:02
Все разобрался... повесил два сопрота на ось Х и У по 100 и 50 ком.

Да, обязательно! Если на оси будет висеть бесконечность, то винда жостик не опознает :)

dop3
02.11.2007, 05:27
Кого интересует дистанционное включение компа пультом? Помогу.
Если можно,помогите с лекарством для girder 4.0.14.0 или позже.
Dop3

dop3
06.11.2007, 12:05
Mike,огромное спасибо тебе за помощь!!! Dop3

Menen
06.11.2007, 13:53
Может лекарство переложить в ог-д....

alexsorockin
11.10.2008, 02:07
Речь про поворотный джойстик сони??? Все кнопки работают? Поворотные работают? Хотел бы какие-нибудь фотографии как делали, плиз!!!

alexsorockin
11.10.2008, 02:31
Ребята, второй раз прочитал но так и не нашёл ответа как всё-таки подключить его к USB? И что такое оси вообще, о которыхз тут постоянно говорите? Какой джойстик USB раздербанивал для переделки сони? И самое главное! Как работает джойтик сони, по какому принципу вообще?
Какой софт надо использовать для работы под USB? К Centrafuse можно подцепить?

SBorovkov
12.10.2008, 23:09
Ребята, второй раз прочитал но так и не нашёл ответа как всё-таки подключить его к USB? И что такое оси вообще, о которыхз тут постоянно говорите? Какой джойстик USB раздербанивал для переделки сони? И самое главное! Как работает джойтик сони, по какому принципу вообще?
Какой софт надо использовать для работы под USB? К Centrafuse можно подцепить?

Покупаешь genius maxfighter f16, разбираешь, дальше дружишь с паяльником, либо находишь человека, который тебе перепаяет 3 провода. Человек с мозгами, заточенными на паяльник, разберется быстро что надо перепаять.

А что будет делать джойстик зависит от того, что ты в autohotkey запрограмишь.

alexsorockin
12.10.2008, 23:34
Паяю я отлично, а вот хотелось бы узнать принцип работы джойстика, я его не разбирал, так как был не мой (отдал уже) а пока новый не купил...

alexsorockin
12.10.2008, 23:48
Имеет значение количество кнопок на джойстике Genius и на джойстике Sony для автомагнитолы??? Все кнопки будут функционировать?

mcf1
13.10.2008, 00:37
не знаю о каком genius идет речь и как он устроен, но в сони все предельно просто, два провода замыкаются разными кнопками, к которым последовательно включены резисторы разного номинала, по номиналам резисторов и определяется какую кнопку ты нажал.

SBorovkov
13.10.2008, 01:37
genuis maxfighter f16 нужен как usb устройство, которое сможет преобразовать различные сопротивления в стандартное устройство "джойстик" и виртуальные положения ручек в нем. То есть вместо переменника впаиваешь два провода джойстика (ну еще может добавочное сопротивление придется накинуть последовательно с сонькой, а то у меня две кнопки с самыми маленькими сопротивлениями путал) и получаешь, что при нажатии на рычаг/кнопку джойстика sony меняется положение по одной из осей джойстика.
Дальше autohotkey в руки.

Для большей понятности схемы разных джойстиков - почти все в реальности резистивные...
http://elektron.pol.lublin.pl/users/djlj24/studio24/kable/pilotyca.htm

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

alexsorockin
13.10.2008, 07:51
непонятно что такое ось???

mcf1
13.10.2008, 10:41
это одна из плоскостей аналогового манипулятора (вверх/вниз)

alexsorockin
16.10.2008, 00:03
....

alexsorockin
16.10.2008, 00:26
Схемы подключения джойстика Sony RM-X2S , Sony RM-X4S
http://llg.cubic.org/tools/sonyrm/ - повесить сопрот 120ко на 6,8 pin порта (в схеме не нарисовано) - ось х
вторая схема
http://freeweb.supereva.com/dmc.freeweb/?p - в схеме нет проводка от оси Х, на разъём подключения джойстика.
Там же лежит готовый софт под winamp (plugin)
__________________________________________________ ____________

Для настройки под другой софт потребуется программа autohotkey

Скрипт для управления сфтом.
; Скрипт для подключения автомобильного двойстика Sony X4S к CarPc
; *********************** Секция настроек начало ***********************
JoystickNumber = 1
VolumeStep = 5
; Погрешность определения значений
KeyGetDelta = 0.3
; Значения кнопок
JKey_OFF =
JKey_ATT = 1.82
JKey_X1 =
JKey_X2 = 2.6
JKey_X3 = 11.1
JKey_PREV = 3.4
JKey_NEXT = 4.6
JKey_VOLD = 6.2
JKey_VOLU = 8.2
JKey_SOURCE = 0.8
; Переменная в которой запоминаем громкость (для Mute)
MUTE_SOUND = 0
; *********************** Секция настроек конец ***********************

#SingleInstance
SetFormat, float, 0.1 ; Omit decimal point from axis position percentages.

; Читаем инфу по жостику. Пока с ней ничего не делаем
GetKeyState, joy_buttons, %JoystickNumber%JoyButtons
GetKeyState, joy_name, %JoystickNumber%JoyName
GetKeyState, joy_info, %JoystickNumber%JoyInfo

SoundGet, MUTE_SOUND
Loop
{
; Читаем состояние кнопок. Если кнопарь нажат, то переменная button(№кнопки)= D
Loop, %joy_buttons%
{
GetKeyState, button%a_index%, %JoystickNumber%joy%a_index%
}

; Читаем показания оси Х - по сути основных кнопок жостика
GetKeyState, joyx, %JoystickNumber%JoyX

; Читаем мышиный скролл (пока не пользуем)
; GetKeyState, mouse_Down, WheelDown
; GetKeyState, mouse_Up, WheelUp

; Генерим нужные действия:

; изменение громкости - меньше

If joyx-KeyGetDelta <= JKey_VOLD and joyx+KeyGetDelta >= JKey_VOLD
{
SoundSet -VolumeStep
}

; изменение громкости - больше
If joyx-KeyGetDelta <= JKey_VOLU and joyx+KeyGetDelta >= JKey_VOLU
{
SoundSet +VolumeStep
}

; JKey_X1
If joyx-KeyGetDelta <= JKey_X1 and joyx+KeyGetDelta >= JKey_X1
{
}

; JKey_OFF
If joyx-KeyGetDelta <= JKey_OFF and joyx+KeyGetDelta >= JKey_OFF
{
; Действие на JKey_OFF
}


; JKey_ATT
If joyx-KeyGetDelta <= JKey_ATT and joyx+KeyGetDelta >= JKey_ATT
{
; Действие на JKey_ATT
SoundGet, Tmp
If Tmp = 0 ;мы в режиме MUTE
{
SoundSet, MUTE_SOUND
}
Else
{
SoundGet, MUTE_SOUND
SoundSet, 0
}

}


; JKey_X2
If joyx-KeyGetDelta <= JKey_X2 and joyx+KeyGetDelta >= JKey_X2
{
; Действие на JKey_X2
WinActivate ahk_class E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8

Send !2
}

; JKey_X3
If joyx-KeyGetDelta <= JKey_X3 and joyx+KeyGetDelta >= JKey_X3
{
; Действие на JKey_X3
WinActivate ahk_class E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8

Send !5
}

; JKey_PREV
If joyx-KeyGetDelta <= JKey_PREV and joyx+KeyGetDelta >= JKey_PREV
{
; Действие на JKey_PREV
WinActivate ahk_class E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8
Send !1
}

; JKey_NEXT
If joyx-KeyGetDelta <= JKey_NEXT and joyx+KeyGetDelta >= JKey_NEXT
{
; Действие на JKey_NEXT
WinActivate ahk_class E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8
Send !3
}

; JKey_SOURCE
If joyx-KeyGetDelta <= JKey_SOURCE and joyx+KeyGetDelta >= JKey_SOURCE
{
; Действие на JKey_SOURCE
WinActivate ahk_class TForm1
Send {F11}
}

; Ждем 250 мс (0.25 сек)
Sleep, 250
}
return
__________________________________________________ _____________

а этот скрипт для опознания координат оси Х – те координаты которые нужно вбивать в превый скрипт.


; July 6, 2005: Added auto-detection of joystick number.
; May 8, 2005 : Fixed: JoyAxes is no longer queried as a means of
; detecting whether the joystick is connected. Some joysticks are
; gamepads and don't have even a single axis.

; If you want to unconditionally use a specific joystick number, change
; the following value from 0 to the number of the joystick (1-32).
; A value of 0 causes the joystick number to be auto-detected:
JoystickNumber = 1

; END OF CONFIG SECTION. Do not make changes below this point unless
; you wish to alter the basic functionality of the script.

; Auto-detect the joystick number if called for:
if JoystickNumber <= 0
{
Loop 32 ; Query each joystick number to find out which ones exist.
{
GetKeyState, JoyName, %A_Index%JoyName
if JoyName <>
{
JoystickNumber = %A_Index%
break
}
}
if JoystickNumber <= 0
{
MsgBox The system does not appear to have any joysticks.
ExitApp
}
}

#SingleInstance
SetFormat, float, 0.2 ; Omit decimal point from axis position percentages.
GetKeyState, joy_buttons, %JoystickNumber%JoyButtons
GetKeyState, joy_name, %JoystickNumber%JoyName
GetKeyState, joy_info, %JoystickNumber%JoyInfo
Loop
{
buttons_down = 0
Loop, %joy_buttons%
{
GetKeyState, joy%a_index%, %JoystickNumber%joy%a_index%
if joy%a_index% = D
buttons_down = %buttons_down%%a_space%%a_index%
}
GetKeyState, joyx, %JoystickNumber%JoyX
axis_info = X%joyx%
GetKeyState, joyy, %JoystickNumber%JoyY
axis_info = %axis_info%%a_space%%a_space%Y%joyy%
IfInString, joy_info, Z
{
GetKeyState, joyz, %JoystickNumber%JoyZ
axis_info = %axis_info%%a_space%%a_space%Z%joyz%
}
IfInString, joy_info, R
{
GetKeyState, joyr, %JoystickNumber%JoyR
axis_info = %axis_info%%a_space%%a_space%R%joyr%
}
IfInString, joy_info, U
{
GetKeyState, joyu, %JoystickNumber%JoyU
axis_info = %axis_info%%a_space%%a_space%U%joyu%
}
IfInString, joy_info, V
{
GetKeyState, joyv, %JoystickNumber%JoyV
axis_info = %axis_info%%a_space%%a_space%V%joyv%
}
IfInString, joy_info, P
{
GetKeyState, joyp, %JoystickNumber%JoyPOV
axis_info = %axis_info%%a_space%%a_space%POV%joyp%
}
ToolTip, %joy_name% (#%JoystickNumber%):`nJoy_info is:%joy_jnfo%`n%axis_info%`nButtons Down: %buttons_down%`n`n(right-click the tray icon to exit)
; Ждем 200 мс (0.2 сек)
Sleep, 200
}
return


__________________________________________________ ___________

Важные параметры.
float, 0.1 – в обоих скриптах ед. измерения (отображения знаков после точки) – для тех у кого координаты находятся близко.

PS: Большое Спасибо Hamster, Mike, за скрипты , помощь в сборе и советах. :blush:


Так и не разобрался в первом скрипте... укажите на строчки, в которых выполняется действие в винде? Каким образом скрипт связывается с остальными программами? Билн, как это сформалировать... Вот если бы надо было двинуть нажать enter - написали бы Send, {ENTER}... А тут как взаимодействие происходит?

alexsorockin
16.10.2008, 01:10
Откомпилировал первый скрипт, запустил. Откомпилировал второй - запустил. оба запущены. Во всплывающем окошке от второго скрипта при поворачивании резисторов видно как меняются показания по осям X,Y,Z, но в то же время как ни крути не срабатывает ни одна функция (Send F11, к примеру (активно окно браузера, должно развернуться на полный экран)...) В чём дело? На каких значениях будет срабатывать?

SBorovkov
16.10.2008, 02:16
Откомпилировал первый скрипт, запустил. Откомпилировал второй - запустил. оба запущены. Во всплывающем окошке от второго скрипта при поворачивании резисторов видно как меняются показания по осям X,Y,Z, но в то же время как ни крути не срабатывает ни одна функция (Send F11, к примеру (активно окно браузера, должно развернуться на полный экран)...) В чём дело? На каких значениях будет срабатывать?

Для начала:

1. убери весь лишний код из скрипта. так будет проще...
2. расширь диапазон, при котором срабатывает нужное тебе событие.
3. назначь какое-либо более простое событие. К примеру, запуск приложения
4. Лучше сначала научись обрабатывать события клавиатуры как тебе надо, ибо они одномоментные, нажал - действие. Приведенный ниже скрипт будет запускать notpad 4 раза в секунду если ось X находится между 20 и 30...
5. Кури эту страницу http://www.script-coding.info/AutoHotkey/Tutorial.html а также хелп к AHK. Там есть почти все, что нужно, чтобы управлять чем угодно.

пример:

#SingleInstance
SetFormat, float, 0.1 ; Omit decimal point from axis position percentages.

; Читаем инфу по жостику. Пока с ней ничего не делаем
GetKeyState, joy_buttons, %JoystickNumber%JoyButtons
GetKeyState, joy_name, %JoystickNumber%JoyName
GetKeyState, joy_info, %JoystickNumber%JoyInfo

SoundGet, MUTE_SOUND
Loop
{
; Читаем состояние кнопок. Если кнопарь нажат, то переменная button(№кнопки)= D
Loop, %joy_buttons%
{
GetKeyState, button%a_index%, %JoystickNumber%joy%a_index%
}

; Читаем показания оси Х - по сути основных кнопок жостика
GetKeyState, joyx, %JoystickNumber%JoyX

If (joyx <= 30) and (joyx >= 20) ; если джойстик по оси х там где надо - запускаем блокнот
{
Run, Notepad ; запуск Блокнота

}
Sleep, 250
}
return

alexsorockin
16.10.2008, 21:07
Понял фишку, написал на основе первого и второго скриптов утилитку. Если надо будет - могу дать исходник. Качайте!
http://slil.ru/26243353

теперь возникло два вопроса:
кто как назначил кнопки джойтика?
у меня так:
SOURCE =Play/Pause
VOLUME = как положено
SEEKUP - следующая песня
SEEKDOWN - предыдущая
ATT - само собой...
вообще не понимаю зачем ATT нужен, если можно на паузу нажать????

кто какие действия назначил на остальные кнопки?

и второй вопрос: как сделать в скрипте анализ двойного нажатия и тройного нажатия??? было бы очень полезно таким образом расширить количество возможных комбинаций

SBorovkov
16.10.2008, 22:11
Посмотри мой журнал. Только что скрипт писал. Правда, под РР.

alexsorockin
17.10.2008, 07:43
Настроил кнопки, изменил в двух местах в самом конце таким образом:

; JKey_PREV
if (jz = joyz_default)
{

; если отпустили кнопу prev или next до того, как началась перемотка, то меняем трек.
If (jx <= JKey_PREV_max) and (jx >= JKey_PREV_min) and (time_from_pressing < 10)
{
SEND ^!+{B}
}

; JKey_NEXT
If (jx <= JKey_NEXT_max) and (jx>= JKey_NEXT_min) and (time_from_pressing < 10)
{
SEND ^!+{N}
}
}
}


return

не работает... странно.... один раз заработало, когда CF , была свёрнута, вхожу - не работает... сворачиваю - опять работает...

SBorovkov
17.10.2008, 14:06
1. Поставь пиликалку на это действие.
2. Сначала активируй CF. И скорее всего все получится.

alexsorockin
17.10.2008, 20:01
Спасибо тебе за скрипт! Сегодня расширил его! Сдеал порежиное управление и кучу всего...
Проблема была в том, что при редактировании горячих клавиш в CF они почему-то активироались, но не все, а как-то беспорядочно, а у меня в это время внастройфках горячие клавиши были отключены... Включил - и всё заработало!!! :big:

alexsorockin
18.10.2008, 12:05
#Singleinstance force

; Скрипт для подключения автомобильного джойстика Sony X4S к CarPc
; *********************** Секция настроек начало ***********************


SetFormat, float, 0.1 ; Omit decimal point from axis position percentages.

JoystickNumber = 1
First_VolumeStep = 1
Repeat_VolumeStep_default = 2
Repeat_VolumeStep_Amplifier = 1.2
First_MouseStep = 1
Repeat_MouseStep_default = 2
Repeat_MouseStep_Amplifier = 1.2
sleeptime_default = 50
sleeptime = sleeptime_default

; Погрешность определения значений
;KeyGetDelta = 0.3
; Значения кнопок
joyx_default=100
joyz_default=100

jKey_shift_min=2
jKey_shift_max=10

JKey_OFF_min = 3.6
JKey_OFF_max = 4.2

JKey_SOURCE_min = 4.6
JKey_SOURCE_max = 5.2

JKey_ATT_min = 5.0
JKey_ATT_max = 5.5

JKey_X1_min = 7.0
JKey_X1_max = 7.5

JKey_NEXT_min = 10.9
JKey_NEXT_max = 11.4

JKey_PREV_min = 8.0
JKey_PREV_max = 9.0

JKey_VOLU_min = 19.00
JKey_VOLU_max = 21.00

JKey_VOLD_min = 14.4
JKey_VOLD_max = 14.9

JKey_X2_min = 38.6
JKey_X2_max = 39.1

JKey_X3_min = 26.9
JKey_X3_max = 27.9
; Переменная в которой запоминаем громкость (для Mute)
MUTE_SOUND = 0
; *********************** Секция настроек конец ***********************

; Читаем инфу по жостику. Пока с ней ничего не делаем
GetKeyState, joy_buttons, %JoystickNumber%JoyButtons
GetKeyState, joy_name, %JoystickNumber%JoyName
GetKeyState, joy_info, %JoystickNumber%JoyInfo

prev_joyx = joyx_default
prev_joyz = joyz_default
joyx = joyx_default
joyz = joyz_default
timer = 0
joymode = 1
joymodes = 2

SoundGet, MUTE_SOUND
Loop
{
; Читаем состояние кнопок. Если кнопарь нажат, то переменная button(№кнопки)= D
Loop, %joy_buttons%
{
GetKeyState, button%a_index%, %JoystickNumber%joy%a_index%
}

; Читаем показания оси Х - по сути основных кнопок жостика
GetKeyState, joyx, %JoystickNumber%JoyX
GetKeyState, joyz, %JoystickNumber%joyZ

;ToolTip, %joyx%

; Читаем мышиный скролл (пока не пользуем)
; GetKeyState, mouse_Down, WheelDown
; GetKeyState, mouse_Up, WheelUp

; Генерим нужные действия:

;ToolTip, joyx=%joyx% (%joyx_default%) joyz=%joyz% (%joyz_default%)
;tooltip, %joymode%

if (joyx<>"") and((joyx<>prev_joyx) or (joyz<>prev_joyz))
{

if (prev_joyx <> joyx_default) or (prev_joyz<>joyz_default)
{
res_button_released( prev_joyx , prev_joyz , timer)
}
timer = 0
prev_joyx := joyx
prev_joyz := joyz
if (joyx <> joyx_default) or (joyz<>joyz_default)
{
res_button_pressed(joyx, joyz, timer)
; SoundPlay beep.wav
}
}
else
{
if (joyx <> joyx_default) or (joyz<>joyz_default)
{
timer := timer + 1
res_button_pressed(prev_joyx, prev_joyz, timer)
}

}

Sleep, sleeptime
}


;---------------------------------------------------------------------------------

res_button_pressed(jx, jz , time_from_pressing)
{
global ; чтобы иметь доступ к глобальным переменным

; SoundPlay, beep.wav
; tooltip, %jx% %jz% %time_from_pressing%

if (jz = joyz_default) and (time_from_pressing = 0) ; то есть обрабатываем непосредственно нажатия, а не удерживания кнопок, БЕЗ ШИФТА!
{
; JKey_X1
If (jx <= JKey_X1_max) and (jx >= JKey_X1_min)
{
SoundPlay, beep.wav
if (joymode=1)
{
SEND ^{F4}
}
if (joymode=2)
{
}
}

; JKey_OFF
If (jx <= JKey_OFF_max) and (jx_min >= JKey_OFF) and (jz = joyz_default)
{
SoundPlay, beep.wav
if (joymode=1)
{
SEND ^{F6}
}
if (joymode=2)
{
;Действие кнопки OFF в режиме 2
MouseGetPos, xpos, ypos
MouseClick, left, xpos, ypos
}
}


; JKey_ATT ;Выключаем микрофон
If (jx <= JKey_ATT_max) and (jx>= JKey_ATT_min)
{
SoundSet, +1, MICROPHONE, mute, 2
SoundPlay, beep.wav
}


; JKey_X2 - переключение режимов работы джойстика
If (jx <= JKey_X2_max) and (jx>= JKey_X2_min)
{
if (joymode>=joymodes)
{
joymode=1
sleeptime := sleeptime_default
}
else
{
joymode:=joymode+1
}
SoundPlay, joymode%joymode%.wav
}

; JKey_X3
If (jx <= JKey_X3_max) and (jx>= JKey_X3_min)
{
SoundPlay, beep.wav
if (joymode=1)
{
SEND ^{F5}
}
if (joymode=2)
{
SEND {RBUTTON}
}
}

; JKey_SOURCE
If (jx<= JKey_SOURCE_max) and (jx>= JKey_SOURCE_min)
{
SoundPlay, beep.wav
if (joymode=1)
{
SEND ^{F3}
}
if (joymode=2)
{
MouseGetPos, xpos, ypos
MouseClick, left, xpos, ypos
}
}

}

;если не надавлен shift
if (jz = joyz_default)
{
; переключение песен предыдущая-следующая, движение мыши вверх-вниз
If (jx <= JKey_PREV_max) and (jx>= JKey_PREV_min) and ((time_from_pressing/5) = round(time_from_pressing/5))
{
if time_from_pressing = 0
{
SoundPlay, beep.wav
if (joymode=1)
{
SEND ^{F1}
}
if (joymode=2)
{
MouseGetPos, xpos, ypos
MouseMove, xpos,ypos+First_MouseStep
Repeat_MouseStep:=Repeat_MouseStep_default
sleeptime := sleeptime_default
}
}
else
if time_from_pressing >= 15
{
if (joymode=1)
{
;Перемотка песни назад
}
if (joymode=2)
{
MouseGetPos, xpos, ypos
Repeat_MouseStep:=Repeat_MouseStep_Amplifier*Repea t_MouseStep
MouseMove, xpos,ypos+Repeat_MouseStep
sleeptime = 0
}
}

}
If (jx <= JKey_NEXT_max) and (jx>= JKey_NEXT_min) and ((time_from_pressing/5) = round(time_from_pressing/5))
{
if time_from_pressing = 0
{
SoundPlay, beep.wav
if (joymode=1)
{
SEND ^{F2}
}
if (joymode=2)
{
MouseGetPos, xpos, ypos
MouseMove, xpos,ypos-First_MouseStep
Repeat_MouseStep:=Repeat_MouseStep_default
sleeptime := sleeptime_default
}
}
else
if time_from_pressing >= 15
{
if (joymode=1)
{
;Перемотка песни вперёд
}
if (joymode=2)
{
MouseGetPos, xpos, ypos
Repeat_MouseStep:=Repeat_MouseStep_Amplifier*Repea t_MouseStep
MouseMove, xpos,ypos-Repeat_MouseStep
sleeptime = 0
}
}
}
}

; изменение громкости, движение мыши влево-вправо
If (jx <= JKey_VOLD_max) and (jx>= JKey_VOLD_min) and ((time_from_pressing/5) = round(time_from_pressing/5))
{
if time_from_pressing = 0
{
SoundPlay, beep.wav
if (joymode=1)
{
sleeptime := sleeptime_default
Repeat_VolumeStep:=Repeat_VolumeStep_default
SoundGet, master_volume
master_volume := master_volume-First_VolumeStep
SoundSet, master_volume
}
if (joymode=2)
{
MouseGetPos, xpos, ypos
MouseMove, xpos-First_MouseStep,ypos
Repeat_MouseStep:=Repeat_MouseStep_default
sleeptime := sleeptime_default
}
}
else
if time_from_pressing >= 15
{
if (joymode=1)
{
sleeptime := sleeptime_default
Repeat_VolumeStep:=Repeat_VolumeStep_Amplifier*Rep eat_VolumeStep
SoundGet, master_volume
master_volume := master_volume-Repeat_VolumeStep
SoundSet, master_volume
}
if (joymode=2)
{
MouseGetPos, xpos, ypos
Repeat_MouseStep:=Repeat_MouseStep_Amplifier*Repea t_MouseStep
MouseMove, xpos-Repeat_MouseStep,ypos
sleeptime = 0
}
}

}
If (jx <= JKey_VOLU_max) and (jx>= JKey_VOLU_min) and ((time_from_pressing/5) = round(time_from_pressing/5))
{
if time_from_pressing = 0
{
SoundPlay, beep.wav
if (joymode=1)
{
sleeptime := sleeptime_default
Repeat_VolumeStep:=Repeat_VolumeStep_default
SoundGet, master_volume
master_volume := master_volume+First_VolumeStep
SoundSet, master_volume
}
if (joymode=2)
{
MouseGetPos, xpos, ypos
MouseMove, xpos+First_MouseStep,ypos
Repeat_MouseStep:=Repeat_MouseStep_default
sleeptime := sleeptime_default
}
}
else
if time_from_pressing >= 15
{
if (joymode=1)
{
sleeptime := sleeptime_default
Repeat_VolumeStep:=Repeat_VolumeStep_Amplifier*Rep eat_VolumeStep
SoundGet, master_volume
master_volume := master_volume+Repeat_VolumeStep
SoundSet, master_volume
}
if (joymode=2)
{
MouseGetPos, xpos, ypos
Repeat_MouseStep:=Repeat_MouseStep_Amplifier*Repea t_MouseStep
MouseMove, xpos+Repeat_MouseStep,ypos
sleeptime = 0
}
}
}

;если надавлен shift
if (jz <> joyz_default)
{
; выделение файлов
If (jx <= JKey_PREV_max) and (jx>= JKey_PREV_min) and ((time_from_pressing/5) = round(time_from_pressing/5))
{
if time_from_pressing = 0
{
SoundPlay, beep.wav
if (joymode=1)
{
}
if (joymode=2)
{
SEND +{DOWN}
}
}
else
if time_from_pressing >= 15
{
if (joymode=1)
{
}
if (joymode=2)
{
SEND +{DOWN}
}
}

}
If (jx <= JKey_NEXT_max) and (jx>= JKey_NEXT_min) and ((time_from_pressing/5) = round(time_from_pressing/5))
{
if time_from_pressing = 0
{
SoundPlay, beep.wav
if (joymode=1)
{
}
if (joymode=2)
{
SEND +{UP}
}
}
else
if time_from_pressing >= 15
{
if (joymode=1)
{
}
if (joymode=2)
{
SEND +{UP}
}
}
}

If ((time_from_pressing/5) = round(time_from_pressing/5)) and (jx <= JKey_X3_max) and (jx>= JKey_X3_min)
{
if time_from_pressing = 0
{
SoundPlay, beep.wav
if (joymode=1)
{
}
if (joymode=2)
{
SEND ^{LBUTTON}
}
}
else
if time_from_pressing >= 15
{
if (joymode=1)
{
}
if (joymode=2)
{
}
}
}
}

}




;---------------------------------------------------------------------------------
;Действие при отпускании

res_button_released(jx, jz , time_from_pressing)
{
global ; чтобы иметь доступ к глобальным переменным

; SoundPlay, beep.wav

if (jz >= jKey_shift_min) and (jz <= jKey_shift_max) ; отпустили кнопку регулировку масштаба
{
If (jx <= JKey_NEXT_max) and (jx>= JKey_NEXT_min)
{

}
If (jx <= JKey_prev_max) and (jx>= JKey_prev_min)
{

}
}

; JKey_PREV
if (jz = joyz_default)
{

; если отпустили кнопу prev или next до того, как началась перемотка, то меняем трек.
If (jx <= JKey_PREV_max) and (jx >= JKey_PREV_min) and (time_from_pressing < 10)
{

}

; JKey_NEXT
If (jx <= JKey_NEXT_max) and (jx>= JKey_NEXT_min) and (time_from_pressing < 10)
{

}
}
}


return

alexsorockin
18.10.2008, 12:06
Функции джойстика:


X2 (MODE) - Переключение режимов (2 режима) - сопровождается аудио-сообщением из файлов joymode1.wav, joymode1.wav. При необходимости количество режимов можно увеличить до бесконечности.

Режим 1 - режим проигрывателя
SOURCE - CTRL+F3
NEXT - CTRL+F2 (следующая песня)
PREV - CTRL+F1 (предыдущая песня)
VOLU - увеличение Master-громкости Windows
VOLD - уменьшение Master-громкости Windows
OFF - CTRL+F6 (компьютер в ждущий режим), режим сна - отдельной кнопкой на панели автомобиля, ей же и включается
ATT - выключение микрофона второй звуковой карты (у меня подключен USB SOUND ADAPTER)
X1(SEL) - CTRL+F4 (поднять трубку), Загрузить "ТЕЛЕФОН"
X3 (DSPL) - CTRL+F5 (повесить трубку)

Режим 2 - режим Windows
VOLU - движение мыши вправо
VOLD - движение мыши влево
NEXT - движение мыши верх
PREV - движение мыши вниз
SOURCE - клик левой кнопкой мыши
SHIFT+NEXT - выделение файлов в проводнике вверх (SHIFT+вверх)
SHIFT+NEXT - выделение файлов в проводнике вниз (SHIFT+вниз)
X3 (DSPL) - правая кнопка мыши
SHIFT + X3 (DSPL) - CTRL+левая кнопка мыши (SHIFT+SOURCE) почему-то не работает...


Чтобы отключить оповещение о действии (пищание) можно просто удалить файл beep.wav

Hamster
18.10.2008, 21:39
Отличная работа!
Я когда писал этот скрипт конечно совсем не заморачивался :)

SBorovkov
19.10.2008, 02:14
2 alexsorockin
Ты еще не использовал возможности различия длинного и короткого нажатия. Я, к примеру, ща сделал так, чтобы длинное нажатие power сворачивало РР, а короткое - восстанавливало. Также можно поступить и с какими-нить еще действиями. Жмешь коротко - открывается один экран, долго - другой (но желательно похожие, чтобы голова не пухла :big:).

То есть ты можешь комп выключать только при длинном нажатии, а при коротком - делать что-нить другое.

Меня прикалывает, что почему-то нигде не видел кода, который позволяет полноценно обратабывать нажатия разной длительности, обрабатывать повторения и пр. Хотя самого когда там 10 строк. Все обрабатывали статические состояния кнопок, не учитывая время, так сказать.

alexsorockin
19.10.2008, 15:03
таймер вставить и обрабатывать различия по времени между нажатиями в двух сканах цикла...

можешь дать код, а то думать самому в лом, ПОЖАЛУЙСТА! ВОСКРЕСЕНЬЕ ВЕДЬ!

У меня пока голова забита как делать двойное и тройное нажатие...

SBorovkov
20.10.2008, 00:06
таймер вставить и обрабатывать различия по времени между нажатиями в двух сканах цикла...

можешь дать код, а то думать самому в лом, ПОЖАЛУЙСТА! ВОСКРЕСЕНЬЕ ВЕДЬ!

У меня пока голова забита как делать двойное и тройное нажатие...

Двойное и тройное нажатие как раз сложно обработать в рамках этой модели. А вот длинные-короткие - нефиг делать:

На onpressing пикаешь на нажатие (timer=0), но ничего более не делаешь!
Далее, если дожидаешься onpressing с timer=xxx, то делаешь действие, которое опеределено по длинному нажатию (можно заодно еще раз пикнуть). Если же случилось onrelease с таймером менее xxx, то это означает, что произошло короткое нажатие (тут не пикаешь, но выполняешь действие, связанное с коротким нажатием).

То есть короткое нажатие ты определяешь не по нажатию, а по отпусканию. У меня именно так была сделана перемотка треков/переключение. Там путанно с константами в плане определения времени, но суть именно такая. Определи, что короткое нажатие, к примеру, меньше 0.5 секунды. Задержка, связанная с тем, что событие короткого нажатия привязано к отпусканю, не ощущается.

alexsorockin
22.10.2008, 16:19
назначаемые действия:

кратковременное нажатие:
OFF
X1 (SEL)
X2 (MODE)
X3 (DSPL)
ATT
NEXT
PREV
VOLU
VOLD
SOURCE
суперкратковременное нажатие SHIFT (100мс)
SHIFT+OFF
SHIFT+X1 (SEL)
SHIFT+X2 (MODE)
SHIFT+X3 (DSPL)
SHIFT+ATT
SHIFT+NEXT
SHIFT+PREV
SHIFT+SOURCE

нажатие с задержкой 1с:
OFF
X1 (SEL)
X2 (MODE)
X3 (DSPL)
ATT
NEXT
PREV
VOLU
VOLD
SOURCE
суперзадержка нажатия SHIFT (2,5 с)
SHIFT+OFF
SHIFT+X1 (SEL)
SHIFT+X2 (MODE)
SHIFT+X3 (DSPL)
SHIFT+ATT
SHIFT+NEXT
SHIFT+PREV
SHIFT+SOURCE

итого: 38 действий

---
замечания:
подбирал резистор. получилось, что при одновременном нажатии SHIFT+X2 (MODE) изменялась не координата первой оси X, а координата Y.. При одномременном нажатии изменяются значения координат X и Z по отношению к нажатию без шифта... Может быть, надо было дальше подбирать резистор, но я остановился на этом...

alexsorockin
23.10.2008, 00:31
а вот и сам скрипт, который осталось только откомпилировать, предварительно подставив ваши значения кнопок...

#Singleinstance force

; Скрипт для подключения автомобильного джойстика Sony X4S к CarPc
; *********************** Секция настроек начало ***********************


SetFormat, float, 0.1 ; Omit decimal point from axis position percentages.

JoystickNumber = 1
First_VolumeStep = 1
Repeat_VolumeStep = 2
Repeat_VolumeStep_Default = 2
Repeat_VolumeStep_Amplifier = 1.1
First_MouseStep = 1
Repeat_MouseStep_default = 2
Repeat_MouseStep_Amplifier = 1.2
sleepdelay_default = 50
sleepdelay := sleepdelay_default
time_from_pressing_delay = 30
joymodes = 2

joyx_default=100
joyy_default=100
joyz_default=100


; Значения кнопок БЕЗ ШИФТА
JKey_OFF_min = 3.6
JKey_OFF_max = 4.1

JKey_X1_min = 7.71
JKey_X1_max = 8.9

JKey_X2_min = 39.00
JKey_X2_max = 41.00

JKey_X3_min = 27.00
JKey_X3_max = 30.00

JKey_ATT_min = 6.15
JKey_ATT_max = 6.74

JKey_NEXT_min = 11.50
JKey_NEXT_max = 12.60

JKey_PREV_min = 9.0
JKey_PREV_max = 10.0

JKey_VOLU_min = 20.0
JKey_VOLU_max = 21.50

JKey_VOLD_min = 15.00
JKey_VOLD_max = 16.10

JKey_SOURCE_min = 4.25
JKey_SOURCE_max = 4.8

jKey_SHIFT_min=2
jKey_SHIFT_max=10


; Значения кнопок С ШИФТОМ
JKey_OFF_SHIFT_min = 7.0
JKey_OFF_SHIFT_max = 8.0

JKey_SHIFT_OFF_min = 6.34
JKey_SHIFT_OFF_max = 7.33

JKey_X1_SHIFT_min = 21.0
JKey_X1_SHIFT_max = 25.0

JKey_SHIFT_X1_min = 3.6
JKey_SHIFT_X1_max = 4.1

JKey_X2_SHIFT_min = 3.6 ;Y
JKey_X2_SHIFT_max = 4.1 ;Y

JKey_SHIFT_X2_min = 3.6
JKey_SHIFT_X2_max = 4.1

JKey_X3_SHIFT_min = 69.94
JKey_X3_SHIFT_max = 70.54

JKey_SHIFT_X3_min = 3.6
JKey_SHIFT_X3_max = 4.1

JKey_ATT_SHIFT_min = 17.0
JKey_ATT_SHIFT_max = 19.0

JKey_SHIFT_ATT_min = 3.6
JKey_SHIFT_ATT_max = 4.1

JKey_NEXT_SHIFT_min = 34.0
JKey_NEXT_SHIFT_max = 38.0

JKey_SHIFT_NEXT_min = 3.6
JKey_SHIFT_NEXT_max = 4.1

JKey_PREV_SHIFT_min = 27.0
JKey_PREV_SHIFT_max = 29.50

JKey_SHIFT_PREV_min = 3.6
JKey_SHIFT_PREV_max = 4.1

JKey_SOURCE_SHIFT_min = 11.50
JKey_SOURCE_SHIFT_max = 13.00

JKey_SHIFT_SOURCE_min = 4.2
JKey_SHIFT_SOURCE_max = 4.5



; Переменная в которой запоминаем громкость (для Mute)
MUTE_SOUND = 0
; *********************** Секция настроек конец ***********************



; Читаем инфу по жостику. Пока с ней ничего не делаем
GetKeyState, joy_buttons, %JoystickNumber%JoyButtons
GetKeyState, joy_name, %JoystickNumber%JoyName
GetKeyState, joy_info, %JoystickNumber%JoyInfo

prev_joyx := joyx_default
prev_joyy := joyy_default
prev_joyz := joyz_default
timer = 0
joymode = 1
CoordMode, ToolTip

SoundGet, MUTE_SOUND
Loop
{
; Читаем состояние кнопок. Если кнопарь нажат, то переменная button(№кнопки)= D
Loop, %joy_buttons%
{
GetKeyState, button%a_index%, %JoystickNumber%joy%a_index%
}

; Читаем показания оси Х - по сути основных кнопок жостика
GetKeyState, joyx, %JoystickNumber%JoyX
GetKeyState, joyy, %JoystickNumber%JoyY
GetKeyState, joyz, %JoystickNumber%joyZ


; Генерим нужные действия:
;
if (joyx=50) and (joyy=50) and (joyz=50)
{
goto, 1
}

if ((joyx=joyx_default) and (AxisX=1)) or ((joyy=joyy_default) and (AxisY=1)) or ((joyz=joyz_default) and (AxisZ=1))
{

res_button_released(joyx_prev, joyy_prev, joyz_prev, timer)
timer=0
if (joyx<>joyx_default)
{
AxisX=1
}
else
{
AxisX=0
}
if (joyy<>joyy_default)
{
AxisY=1
}
else
{
AxisY=0
}
if (joyz<>joyz_default)
{
AxisZ=1
}
else
{
AxisZ=0
}

}

if (joyx<>joyx_default) or (joyy<>joyy_default) or (joyz<>joyz_default)
{
if (joyx<>joyx_default)
{
AxisX=1
}
else
{
AxisX=0
}
if (joyy<>joyy_default)
{
AxisY=1
}
else
{
AxisY=0
}
if (joyz<>joyz_default)
{
AxisZ=1
}
else
{
AxisZ=0
}

timer := timer + 1
joyx_prev:=joyx
joyy_prev:=joyy
joyz_prev:=joyz
res_button_pressed(joyx, joyy, joyz, timer)
}
1:

;tooltip, %message%,0,0
Sleep, sleepdelay
}


;---------------------------------------------------------------------------------
res_button_pressed(jx, jy, jz , time_from_pressing)
{
global ; чтобы иметь доступ к глобальным переменным

if (joymode=1) ; режим 1
{
;обрабатываем задержку нажатия только одной кнопки SHIFT
if (time_from_pressing >= time_from_pressing_delay+30) and (jx = joyx_default) and (jy = joyy_default) and (jz <> joyz_default)
{
;подаём звук
if (time_from_pressing = time_from_pressing_delay+30)
{
SoundPlay, beep.wav
}
message=удержание SHIFT
}


;обрабатываем задержку нажатия любой другой кнопки, кроме SHIFT
if (time_from_pressing >= time_from_pressing_delay) and (jz = joyz_default)
{
;подаём звук
if (time_from_pressing = time_from_pressing_delay)
{
SoundPlay, beep.wav
}

;обрабатываем кнопки, кроме SHIFT
; JKey_OFF
If (jx >= JKey_OFF_min) and (jx <= JKey_OFF_max)
{
message=удержание OFF
}

; JKey_X1
If (jx >= JKey_X1_min) and (jx <= JKey_X1_max)
{
message=удержание X1
}

; JKey_X2
If (jx >= JKey_X2_min) and (jx <= JKey_X2_max)
{
message=удержание X2
}

; JKey_X3
If (jx >= JKey_X3_min) and (jx <= JKey_X3_max)
{
message=удержание X3
}

; JKey_ATT
If (jx >= JKey_ATT_min) and (jx <= JKey_ATT_max)
{
message=удержание ATT - выключаем/включаем микрофон
If (time_from_pressing = time_from_pressing_delay)
{
SoundSet, +1, microphone, mute, 2
}

}

; JKey_NEXT
If (jx >= JKey_NEXT_min) and (jx <= JKey_NEXT_max)
{
message=удержание NEXT
}

; JKey_PREV
If (jx >= JKey_PREV_min) and (jx <= JKey_PREV_max)
{
message=удержание PREV
}

; JKey_VOLU
If (jx >= JKey_VOLU_min) and (jx <= JKey_VOLU_max)
{
message=удержание VOLU
Repeat_VolumeStep:=Repeat_VolumeStep_Amplifier*Rep eat_VolumeStep
SoundGet, master_volume
master_volume:=master_volume+Repeat_VolumeStep
SoundSet, master_volume
}

; JKey_VOLD
If (jx >= JKey_VOLD_min) and (jx <= JKey_VOLD_max)
{
message=удержание VOLD
Repeat_VolumeStep:=Repeat_VolumeStep_Amplifier*Rep eat_VolumeStep
SoundGet, master_volume
master_volume:=master_volume-Repeat_VolumeStep
SoundSet, master_volume
}

; JKey_SOURCE
If (jx >= JKey_SOURCE_min) and (jx <= JKey_SOURCE_max)
{
message=удержание SOURCE
}
}

;обрабатываем задержку нажатия любой кнопки в паре с SHIFT
if (time_from_pressing >= time_from_pressing_delay) and (jz <> joyz_default) and ((jx <> joyx_default) or (jy <> joyy_default))
{
;подаём звук
if (time_from_pressing = time_from_pressing_delay)
{
SoundPlay, beep.wav
}

; JKey_OFF+SHIFT
If (jx >= JKey_OFF_SHIFT_min) and (jx <= JKey_OFF_SHIFT_max) and (jz >= JKey_SHIFT_OFF_min) and (jz <= JKey_SHIFT_OFF_max)
{
message=удержание SHIFT+OFF
}

; JKey_X1+SHIFT
If (jx >= JKey_X1_SHIFT_min) and (jx <= JKey_X1_SHIFT_max) and (jz >= JKey_SHIFT_X1_min) and (jz <= JKey_SHIFT_X1_max)
{
message=удержание SHIFT+X1
}

; JKey_X2+SHIFT
If (jy >= JKey_X2_SHIFT_min) and (jy <= JKey_X2_SHIFT_max) and (jz >= JKey_SHIFT_X2_min) and (jz <= JKey_SHIFT_X2_max)
{
message=удержание SHIFT+X2
}

; JKey_X3+SHIFT
If (jx >= JKey_X3_SHIFT_min) and (jx <= JKey_X3_SHIFT_max) and (jz >= JKey_SHIFT_X3_min) and (jz <= JKey_SHIFT_X3_max)
{
message=удержание SHIFT+X3
}

; JKey_ATT+SHIFT
If (jx >= JKey_ATT_SHIFT_min) and (jx <= JKey_ATT_SHIFT_max) and (jz >= JKey_SHIFT_ATT_min) and (jz <= JKey_SHIFT_ATT_max)
{
message=удержание SHIFT+ATT
}

; JKey_NEXT+SHIFT
If (jx >= JKey_NEXT_SHIFT_min) and (jx <= JKey_NEXT_SHIFT_max) and (jz >= JKey_SHIFT_NEXT_min) and (jz <= JKey_SHIFT_NEXT_max)
{
message=удержание SHIFT+NEXT
}

; JKey_PREV+SHIFT
If (jx >= JKey_PREV_SHIFT_min) and (jx <= JKey_PREV_SHIFT_max) and (jz >= JKey_SHIFT_PREV_min) and (jz <= JKey_SHIFT_PREV_max)
{
message=удержание SHIFT+PREV
}

; JKey_SOURCE+SHIFT
If (jx >= JKey_SOURCE_SHIFT_min) and (jx <= JKey_SOURCE_SHIFT_max) and (jz >= JKey_SHIFT_SOURCE_min) and (jz <= JKey_SHIFT_SOURCE_max)
{
message=удержание SHIFT+SOURCE
}

}

}


}




;---------------------------------------------------------------------------------
res_button_released(jx, jy, jz , time_from_pressing)
{
global ; чтобы иметь доступ к глобальным переменным

if (joymode=1) ; режим 1
{

;обрабатываем одиночное нажатие SHIFT
if (time_from_pressing < time_from_pressing_delay-18) and (jx = joyx_default) and (jy = joyy_default) and (jz<>joyz_default)
{
;подаём звук
if (time_from_pressing = time_from_pressing_delay-18)
{
SoundPlay, beep.wav
}
message=кратковременно SHIFT
}


;обрабатываем одиночное нажатие без SHIFT
if (time_from_pressing < time_from_pressing_delay) and (jz = joyz_default)
{
SoundPlay, beep.wav

; JKey_OFF
If (jx >= JKey_OFF_min) and (jx <= JKey_OFF_max)
{
message=кратковременно OFF
}

; JKey_X1
If (jx >= JKey_X1_min) and (jx <= JKey_X1_max)
{
message=кратковременно X1
}

; JKey_X2
If (jx >= JKey_X2_min) and (jx <= JKey_X2_max)
{
message=кратковременно X2
}

; JKey_X3
If (jx >= JKey_X3_min) and (jx <= JKey_X3_max)
{
message=кратковременно X3
}

; JKey_ATT
If (jx >= JKey_ATT_min) and (jx <= JKey_ATT_max)
{
message=кратковременно ATT
}

; JKey_NEXT
If (jx >= JKey_NEXT_min) and (jx <= JKey_NEXT_max)
{
message=кратковременно NEXT
}

; JKey_PREV
If (jx >= JKey_PREV_min) and (jx <= JKey_PREV_max)
{
message=кратковременно PREV
}

; JKey_VOLU
If (jx >= JKey_VOLU_min) and (jx <= JKey_VOLU_max)
{
message=кратковременно VOLU
Repeat_VolumeStep:=Repeat_VolumeStep_Default
SoundGet, master_volume
master_volume:=master_volume+Repeat_VolumeStep
SoundSet, master_volume
}

; JKey_VOLD
If (jx >= JKey_VOLD_min) and (jx <= JKey_VOLD_max)
{
message=кратковременно VOLD
Repeat_VolumeStep:=Repeat_VolumeStep_Default
SoundGet, master_volume
master_volume:=master_volume-Repeat_VolumeStep
SoundSet, master_volume
}

; JKey_SOURCE
If (jx >= JKey_SOURCE_min) and (jx <= JKey_SOURCE_max)
{
message=кратковременно SOURCE
}
}

;обрабатываем одиночное нажатие любой кнопки в паре с SHIFT
if (time_from_pressing < time_from_pressing_delay) and (jz <> joyz_default) and ((jx <> joyx_default) or (jy <> joyy_default))
{

SoundPlay, beep.wav

; JKey_OFF+SHIFT
If (jx >= JKey_OFF_SHIFT_min) and (jx <= JKey_OFF_SHIFT_max) and (jz >= JKey_SHIFT_OFF_min) and (jz <= JKey_SHIFT_OFF_max)
{
message=кратковременно SHIFT+OFF
}

; JKey_X1+SHIFT
If (jx >= JKey_X1_SHIFT_min) and (jx <= JKey_X1_SHIFT_max) and (jz >= JKey_SHIFT_X1_min) and (jz <= JKey_SHIFT_X1_max)
{
message=кратковременно SHIFT+X1
}

; JKey_X2+SHIFT
If (jy >= JKey_X2_SHIFT_min) and (jy <= JKey_X2_SHIFT_max) and (jz >= JKey_SHIFT_X2_min) and (jz <= JKey_SHIFT_X2_max)
{
message=кратковременно SHIFT+X2
}

; JKey_X3+SHIFT
If (jx >= JKey_X3_SHIFT_min) and (jx <= JKey_X3_SHIFT_max) and (jz >= JKey_SHIFT_X3_min) and (jz <= JKey_SHIFT_X3_max)
{
message=кратковременно SHIFT+X3
}

; JKey_ATT+SHIFT
If (jx >= JKey_ATT_SHIFT_min) and (jx <= JKey_ATT_SHIFT_max) and (jz >= JKey_SHIFT_ATT_min) and (jz <= JKey_SHIFT_ATT_max)
{
message=кратковременно SHIFT+ATT
}

; JKey_NEXT+SHIFT
If (jx >= JKey_NEXT_SHIFT_min) and (jx <= JKey_NEXT_SHIFT_max) and (jz >= JKey_SHIFT_NEXT_min) and (jz <= JKey_SHIFT_NEXT_max)
{
message=кратковременно SHIFT+NEXT
}

; JKey_PREV+SHIFT
If (jx >= JKey_PREV_SHIFT_min) and (jx <= JKey_PREV_SHIFT_max) and (jz >= JKey_SHIFT_PREV_min) and (jz <= JKey_SHIFT_PREV_max)
{
message=кратковременно SHIFT+PREV
}

; JKey_SOURCE+SHIFT
If (jx >= JKey_SOURCE_SHIFT_min) and (jx <= JKey_SOURCE_SHIFT_max) and (jz >= JKey_SHIFT_SOURCE_min) and (jz <= JKey_SHIFT_SOURCE_max)
{
message=кратковременно SHIFT+SOURCE
}

}


;обрабатываем отпускание удержанной кнопки без SHIFT (для сброса некоторых переменных, нужных для режима удержания (например, увеличение громкости))
if (time_from_pressing > time_from_pressing_delay) and (jz = joyz_default)
{

; JKey_OFF
If (jx >= JKey_OFF_min) and (jx <= JKey_OFF_max)
{
}

; JKey_X1
If (jx >= JKey_X1_min) and (jx <= JKey_X1_max)
{
}

; JKey_X2
If (jx >= JKey_X2_min) and (jx <= JKey_X2_max)
{
}

; JKey_X3
If (jx >= JKey_X3_min) and (jx <= JKey_X3_max)
{
}

; JKey_ATT
If (jx >= JKey_ATT_min) and (jx <= JKey_ATT_max)
{
}

; JKey_NEXT
If (jx >= JKey_NEXT_min) and (jx <= JKey_NEXT_max)
{
}

; JKey_PREV
If (jx >= JKey_PREV_min) and (jx <= JKey_PREV_max)
{
}

; JKey_VOLU
If (jx >= JKey_VOLU_min) and (jx <= JKey_VOLU_max)
{
Repeat_VolumeStep:=Repeat_VolumeStep_Default
}

; JKey_VOLD
If (jx >= JKey_VOLD_min) and (jx <= JKey_VOLD_max)
{
Repeat_VolumeStep:=Repeat_VolumeStep_Default
}

; JKey_SOURCE
If (jx >= JKey_SOURCE_min) and (jx <= JKey_SOURCE_max)
{
}
}


}
}


return

vad3
20.11.2008, 22:20
у меня видимо аппаратная проблема на связке Sony RM-X4S + F16U
при выходе из спящего режима через раз не работает джойстик. в системе висит, но значения не изменяются... внешнее питание на USBхаб подаётся до включения компа...
как то раз удалось заставить работать удалением/определением в устройствах... может как то возможно заставить переинициировать?

SBorovkov
20.11.2008, 22:43
у меня видимо аппаратная проблема на связке Sony RM-X4S + F16U
при выходе из спящего режима через раз не работает джойстик.

Проверь, нет ли в системе еще одного джойстика (к примеру, со звуковой карты)? Есть вероятность, что после спящего режима они меняются местами. Если есть, отключи лишний (в свойствах)

dr_cannabis
22.11.2008, 01:22
Господа, объясните идиоту, уже 2 часа мучаюсь, но понять никак не могу! Как организована функция удержания кнопки, где и как считаеться время нажатия, если можно на примере с одной переменной!

SBorovkov
22.11.2008, 02:16
Господа, объясните идиоту, уже 2 часа мучаюсь, но понять никак не могу! Как организована функция удержания кнопки, где и как считаеться время нажатия, если можно на примере с одной переменной!

да все просто очень на самом деле :-)

Там цикл, который реагирует на любое изменение координат осей.

Вот мой главный цикл

Loop
{
; Читаем состояние кнопок. Если кнопарь нажат, то переменная button(№кнопки)= D
Loop, %joy_buttons%
{
GetKeyState, button%a_index%, %JoystickNumber%joy%a_index%
}

; Читаем показания оси Х - по сути основных кнопок жостика
GetKeyState, joyx, %JoystickNumber%JoyX
GetKeyState, joyz, %JoystickNumber%joyZ

;ToolTip, %joyx%

if (joyx<>"") and((joyx<>prev_joyx) or (joyz<>prev_joyz))
{
; если состояние джойстика изменилось

if (prev_joyx <> joyx_default) or (prev_joyz<>joyz_default)
{
; если было не дефолтное положение - считаем, что прошлое положение отпущено, вызываем обработчик.
res_button_released( prev_joyx , prev_joyz , timer)
}
timer = 0
prev_joyx := joyx
prev_joyz := joyz
if (joyx <> joyx_default) or (joyz<>joyz_default)
{
; Если новое положение не дефолтное, то вызываем обработчик нажатия и начинаем счет времени
res_button_pressed(joyx, joyz, timer)
}
}
else
{
if (joyx <> joyx_default) or (joyz<>joyz_default)
{
; если ничего не изменилось и положение НЕ дефолтное, то увеличиваем таймер на 1 и вызываем обработчик нажатия.
timer := timer + 1
res_button_pressed(prev_joyx, prev_joyz, timer)
}

}

Sleep, 50
}

0. То есть систему включили, у нее все по дефолту, ничего не происходит. далее:
1. Нажали кнопку. Начал вызываться обработчик нажатия. У него есть параметр Timer, который последовательно увеличивается. Если Timer=0, то кнопку только что нажали
2. Кнопку отпустили (или нажали что-то другое) Вызвался обработчик отпускания с параметром Timer, соответствующим времени нажатия на кнопку. Затем см пункт 0 или 1.

Теперь пишем обработчик для единственной кнопки

res_button_pressed(jx, jz , time_from_pressing)
{
global ; чтобы иметь доступ к глобальным переменным
if (jz = joyz_default) and (time_from_pressing = 0) ; то есть обрабатываем непосредственно нажатия, а не удерживания кнопок.
If (jx <= JKey_VOLU_max) and (jx>= JKey_VOLU_min) and ((time_from_pressing/5) = round(time_from_pressing/5))
{
SoundGet, master_volume
if time_from_pressing = 0
{
master_volume := master_volume*(1+(First_VolumeStep/100))
}
else
if time_from_pressing >= 15
{
master_volume := master_volume*(1+(Repeat_VolumeStep/100))
}

SoundSet, master_volume
}
}

Тут смысл такой - если только что нажали - меняем громкость на First_VolumeStep, а если ужерживаем - меняем на Repeat_VolumeStep каждые 5 циклов вызова, но если время от нажатия не менее 15.

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

зы. Скопируй отсюда текст и расставь сдвиги вправо, чтобы понимать какой if на что действует, иначе непонятно... Я вставлял tab, но форум их съел :-(.

dr_cannabis
22.11.2008, 02:31
Спасибо, просто очень в неудобной для читания форме скрипт напечатан (по крайней мере для меня)сложно уловить начало и конец цикла я уже почти весь скрипт по if ам разложил, пока пост заметил! Респект вам ребята очень нужное дело сделали)

KilleRMill
25.01.2009, 21:46
А почему никто не использует другие кнопки F-16U? Там ведь еще 4 кнопки. Да, я понимаю что на SONY их не повесишь, но можно же вывести еще 4 кнопки, для спец нужд. Кто что думает по этому поводу?

LeonyB
24.03.2009, 18:41
люди.... а подскажите pls
как сделать так чтобы распознать нажатие Button 1(Pin 2) на game порте?

alexsorockin
10.04.2009, 01:24
Вот последняя версия для джойстика.

Функции:
-Кратковременное нажатие каждой кнопки
-Кратковременное нажатие пары кнопок
-Долгое нажатие каждой кнопки
-Долгое нажатие пары кнопок
-Ini файл с настройками
-32 горячие клавиши, задаются в Ini файле
-прочие настройки

dr_cannabis
29.10.2009, 22:08
Еще 5 копеек к скрипту перешел на виндовс 7 и обнаружил что звук перестал регулироваться командами Soudset вот решения с форума

On Windows Vista, SoundSet and SoundGet affect only the script itself (this may be resolved in a future version). There are at least two ways to work around this:

1) In the properties dialog for the file "AutoHotkey.exe" (or a compiled script), change the compatibility setting to "Windows XP".

2) Have the script send volume-control keystrokes to change the master volume for the entire system. For example:Code (Copy):
Send {Volume_Up} ; Raise the master volume by 1 interval (typically 5%).
Send {Volume_Down 3} ; Lower the master volume by 3 intervals.
Send {Volume_Mute} ; Mute/unmute the master volume

alexsorockin
16.05.2010, 05:59
Скоро снова напишу программку на делфи - можно будет настроить:
- любую кнопку
- любую комбинацию кнопок
- любую последовательность отдельно нажатых кнопок
- любую последовательность отдельно нажатых кнопок или комбинаций
- долгое нажатие отдельной кнопки
- долгое нажатие комбинации кнопок
- завершение долгим нажатием отдельной кнопки после любой последовательности отдельно нажатых кнопок
- завершение долгим нажатием комбинации кнопок после любой последовательности отдельно нажатых кнопок
- завершение долгим нажатием комбинации кнопок после любой последовательности отдельно нажатых кнопок или комбинаций

а также:
- оконный интерфейс
- назначение любых горячих клавиш
- режим мыши

и многое другое...

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

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

Mshow
30.10.2010, 02:47
Скоро снова напишу программку на делфи - можно будет настроить:
- любую кнопку
- любую комбинацию кнопок
- любую последовательность отдельно нажатых кнопок
- любую последовательность отдельно нажатых кнопок или комбинаций
- долгое нажатие отдельной кнопки
- долгое нажатие комбинации кнопок
- завершение долгим нажатием отдельной кнопки после любой последовательности отдельно нажатых кнопок
- завершение долгим нажатием комбинации кнопок после любой последовательности отдельно нажатых кнопок
- завершение долгим нажатием комбинации кнопок после любой последовательности отдельно нажатых кнопок или комбинаций

а также:
- оконный интерфейс
- назначение любых горячих клавиш
- режим мыши

и многое другое...

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

быстро не обещаю - времени свободного практически нет, уже 2 месяца как компьютер домой принёс, поставил Win7, а езжу без музыки...
Что-нибудь сдвинулось? интересно опробовать)

Sol_S
25.07.2013, 14:42
Народ привет. Извиняюсь за никрофильство :)
Есть возможность прикупить сей девайс. Вы его юзали смотрю и удачно. Хотел поинтересоваться джойстик удобный или лучше кнопки на руле?

zanuda
25.07.2013, 16:07
Народ привет. Извиняюсь за никрофильство :)
Есть возможность прикупить сей девайс. Вы его юзали смотрю и удачно. Хотел поинтересоваться джойстик удобный или лучше кнопки на руле?

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

rainstation
25.07.2013, 20:18
Пульт чумовой. Такой бы по bluetooth и с назначением пользовательских функций на все клавиши.... Мечта.
Реально б/у незадорого ни у кого нет? Попробую над ним поколдовать.

Sol_S
26.07.2013, 11:50
у меня нет кнопок на руле. потому крайне доволен девайсом.
Возможность прикупить новый или бу? а то мне пришлось как запчасть его покупать

Б/у за копейки отдают, без крепежа правда, но за мной последний аргумент - молоток :blush:

Спасибо за ответы. Будем брать.