Ermes Publicado 18 de Diciembre del 2007 Reportar Share Publicado 18 de Diciembre del 2007 Bueno, pues tenia por ahi unos "tips" de programacion que se me terminaran perdiendo, con lo que me he decidido a ponerlos por aqui, que seguro que vienen bien. La intencion era tener partes de codigo de ejemplo donde se implementan algunas funciones que dispone el SWF22 aprovechando la programacion logica. Practicamente todo lo que se puede implementar en el TM Cougar, se puede realizar en el SWF22, con la salvedad de los tipos de funcionamiento de los ejes. NOTA: La mayoria de las partes de codigo han sido recuperadas de los foros de programacion de FrugalWorld, los Xfiles de DonUlfonso, los perfiles de Bob Church, Jagstang, J. Hallows, etc... Si voy recopilando mas partes de codigo interesante, las ire agregando. Boton con dos funciones dependiendo del tiempo que se pulsa =========================================================== En Cougar BTN S3 KD(X1) DLY(300) KU(X1) DEF X2 (X1 AND NOT S3) BTN X2 Pinky_switch (quick release) En SWF22 DEF X1 (NOT X1* AND S3) OR (X1* AND X10) DEF X10 DELAY(300) X1* Cuando se pulsa S1 genera una pulsacion instantanea de X1. Esa provoca que X1* se ponga en on. Se mantiente asi hasta que 300ms despues se activa X10 y genera otro pulso de X1 haciendo que X1* se ponga a off Con la siguiente linea se consigue que si sueltas S1 dentro de esos 300ms se active X3 y por tanto la funcion correspondiente: DEF X2 (X1* AND NOT S1) BTN X2 Pinky_switch (quick release) Otro modo de hacerlo en SWF22 DEF X1 ( NOT X1 AND S3 ) OR ( X1 AND NOT X10 ) DEF X10 DELAY(300) S3 DEF X2 ( X1 AND NOT S3 ) BTN X2 Pinky_switch (quick release) Al hacer un doble click y mantener mueve RudderTrim. El siguiente doble-click mueve el AileronTrim ================================================================================================== Con cada doble-click vamos cambiando el estado de X3* En Cougar BTN H1L /T KD(X1) DLY(350) KU(X1) /T KD(X2) DLY(350) KU(X2) BTN H1R /T KD(X9) DLY(350) KU(X9) /T KD(X10) DLY(350) KU(X10) DEF X3 (X1 AND X2) OR (X9 AND X10) DEF X4 DELAY(400) (H1L OR H1R) DEF X5 (X4 AND H1L) AND X3* DEF X6 (X4 AND H1L) AND NOT X3* BTN X5 RudderTrimLeft BTN X6 AileronTrimLeft DEF X7 (X4 AND H1R) AND X3* DEF X8 (X4 AND H1R) AND NOT X3* BTN X7 RudderTrimRight BTN X8 AileronTrimRight La traduccion de la rutina de doble-click en SWF22: DEF X1 (NOT X1* AND H1L) OR (X1* AND X40) DEF X2 (NOT X2* AND H1L AND X1*) OR (X2* AND X40) DEF X40 DELAY(350) (X1* OR X2*) DEF X3 (X1 AND X2) Con un doble click de S1 ejecuto Trim_Reset DEF X1 (NOT X1* AND H1L) OR (X1* AND X40) DEF X2 (NOT X2* AND H1L AND X1*) OR (X2* AND X40) DEF X40 DELAY(350) (X1* OR X2*) DEF X3 (X1 AND X2) AND H1L BTN X3 Trim_Reset Instruccion PULSE ================ Una de las funciones utilizadas en mi perfil es la utilizacion de pulsos para el TRIM. De esta manera, al pulsar sobre H1 con S3 en vez de mandar la pulsacion de manera continua, se va mandando a impulsos con la frecuencia que queramos. Esto sirve de ejemplo de la utilizacion de PULSE en el SWF22 En el SWF22 tenemos limitados el numero de PULSE que utlizamos creo que a 5. Todo el que se ponga de mas, se ignorara. Ahora bien, igual que para el DELAY se puede utilizar un FLAG para definir el pulso y asociarselo a todos los botones que queramos, en mi caso X40, ahorrando asi el numero a utilizar. DEF X40 PULSE (60 200) (H1U OR H1D OR H1L OR H1R) AND S3 DEF X41 H1U AND X40 DEF X42 H1D AND X40 DEF X43 H1L AND X40 DEF X44 H1R AND X40 BTN X41 /N Trim_Nose_Down BTN X42 /N Trim_Nose_Up BTN X43 /N Trim_Roll_Left BTN X44 /N Trim_Roll_Right Ademas en mi perfil, utilizo el HAT1 sin pulsar S3 para mover las vistas pero de manera continua DEF X5 H1U AND NOT S3 DEF X6 H1D AND NOT S3 DEF X7 H1L AND NOT S3 DEF X8 H1R AND NOT S3 BTN X5 View_up BTN X6 View_Down BTN X7 View_Left BTN X8 View_Right Citar Enlace al comentario Compartir en otros sitios web More sharing options...
Ermes Publicado 18 de Diciembre del 2007 Autor Reportar Share Publicado 18 de Diciembre del 2007 Selector de dos estados ============================ Hay ocasiones en las que es necesario utilizar distintas funciones para cada boton en funcion del avion que se este volando. Por ejemplo, en aviones como el A10 que no tiene selector de programas de CMS podriamos utilizar esos botones. Esa misma tecnica es la que utlizo para configurar si voy a utilizar las IVC (internal voice comms) o TeamSpeak. Es como si fuera un interruptor, en nuestro caso de dos estados, que se puede seleccionar en cualquier momento (generalmente al principio, si es que queremos llegar a hablar algo ) Selecciono el tipo de comunicacion RogerWilco o IVC (por defecto) pulsando simultaneamente H2U y H3U Rem X1 hace de indicador de estado de la seleccion que queramos. DEF X1 ( H2U AND H3U ) Rem toggle indicator -> (default) Ingame-Comms / RogerWilco DEF X52 (T2 AND NOT S3) AND NOT X1* DEF X53 (T3 AND NOT S3) AND NOT X1* DEF X54 (T2 AND NOT S3) AND X1* DEF X55 (T2 AND NOT S3) AND X1* BTN X52 Transmit_Comm1 Rem BTN X53 Transmit_Comms2 Rem BTN X54 RogerWilco BTN X55 Chat NOTA: el indicador '*' significa que cambia de estado 'on-->off-->on...' el flag correspondiente (X1*) cada vez que se activa X1. P. ej. DEF X1 S1 ___ ________ S1 ___| |___| |__ ___ ________ X1 ___| |___| |__ _______ X1* ___| |___________ ^ ^ | | cambios de estado Selector de modos (tres estados o modos) ======================================== Conseguimos que X1 este activo una vez que se haya presionado H1L, y hasta que se presione H1U o H1R. En Cougar: BTN H1L /I KD (X1) KU (X2) KU (X3) REM MODE 1 /O ^ BTN H1U /I KU (X1) KD (X2) KU (X3) REM MODE 2 /O ^ BTN H1R /I KU (X1) KU (X2) KD (X3) REM MODE 3 /O ^ En SWF22: DEF X1 ( NOT X1 AND (H1L AND S3) ) OR ( X1 AND NOT (( H1U OR H1R) AND S3) ) DEF X2 ( NOT X2 AND ( H1U AND S3) ) OR ( X2 AND NOT ((H1L OR H1R) AND S3) ) DEF X3 ( NOT X3 AND ( H1R AND S3) ) OR ( X3 AND NOT ((H1L OR H1U ) AND S3) ) La primera parte define que el flag en concreto se pone a 'on' si en ese momento esta a 'off' y se pulsa la combinacion correspondiente (en nuestro caso H1L y S3) La segunda parte asegura que esta flag permanece en 'on' una vez que esta activa siempre y cuando no se aprete la combinacion de botones listados (en nuestro caso que se pulse o bien H1U y S3 o bien H1R y S3) Citar Enlace al comentario Compartir en otros sitios web More sharing options...
Grizzly Publicado 18 de Diciembre del 2007 Reportar Share Publicado 18 de Diciembre del 2007 Este post es una muy buena idea Ermes. :wink: Citar Cnel. Grizzly Amigo Madbird D.E.P. 13.03.2009 Enlace al comentario Compartir en otros sitios web More sharing options...
Ranob Publicado 23 de Diciembre del 2007 Reportar Share Publicado 23 de Diciembre del 2007 Hola Ermes, para los poco entendidos en HOTAS y que usamos perfiles que ya viene hecho jeje. Que significa cada linea exactamente? BTN S3 KD(X1) DLY(300) KU(X1) -> KD? KU? DEF X2 (X1 AND NOT S3) -> Se esta definiendo un boton-variable? Thx Citar Enlace al comentario Compartir en otros sitios web More sharing options...
Ermes Publicado 26 de Diciembre del 2007 Autor Reportar Share Publicado 26 de Diciembre del 2007 BTN S3 KD(X1) DLY(300) KU(X1) -> KD? KU? DEF X2 (X1 AND NOT S3) -> Se esta definiendo un boton-variable? A ver si lo consigo explicar. Tu con la programacion logica puedes asignar macros a botones (al pulsar S3 -> macro tal...) o a variables tipo X1, X2... Para que activen alguna funcion (BTN X2 Pinky_switch) tengo que definir previamente como se activan. Por partes: BTN S3 KD(X1) DLY(300) KU(X1) Indica que cuando pulso S3 -> pulse/active X1 -> espere 300ms ->deje de pulsar/desactive X1 (KD/KU digamos... KeyDown KeyUp) DEF X2 (X1 AND NOT S3) Aqui defino que X2 se activa siempre que X1 este activado y no S3. Es decir, al pulsar S3 se me activa X1 y dura activado 300ms. Si suelto S3 antes de ese tiempo (pulsacion corta), cumpliria la condicion para que se active X2 Asi en el caso del S3 actuaria como boton pinky del hotas y manteniendolo pulsado mas de ese tiempo, activando el /I de otros botones. Si en vez de hacerlo con este boton, lo hicieramos con otro la doble funcion seria asi: P.ej. boton S1: pulsacion corta (menos de 2 segundo) MSL Step / Pulsacion larga TrimReset BTN S1 KD(X1) DLY(2000) KU(X1) DEF X2 (X1 AND NOT S1) DEF X3 (S1 AND NOT X1) Rem --- ahora asigno las funciones a las variables BTN X2 MSL_Step BTN X3 TrimReset No se que tal se entendera Citar Enlace al comentario Compartir en otros sitios web More sharing options...
MadBird Publicado 26 de Diciembre del 2007 Reportar Share Publicado 26 de Diciembre del 2007 De PM Cristalino :wink: Citar Enlace al comentario Compartir en otros sitios web More sharing options...
Publicaciones recomendadas
Join the conversation
Puede publicar ahora y registrarse más tarde. Si tiene una cuenta, iniciar sesión para publicar con su cuenta.