Jump to content

Programacion TM


Ermes

Publicaciones recomendadas

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 

Enlace al comentario
Compartir en otros sitios web

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)

Enlace al comentario
Compartir en otros sitios web

Este post es una muy buena idea Ermes.

:wink:

Cnel. Grizzly                                                                                                                    Amigo Madbird D.E.P. 13.03.2009
signgrizzlylowtj8.jpg

Enlace al comentario
Compartir en otros sitios web

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

:P

Enlace al comentario
Compartir en otros sitios web

Join the conversation

Puede publicar ahora y registrarse más tarde. Si tiene una cuenta, iniciar sesión para publicar con su cuenta.

Guest
Responder a este tema...

×   Pegar como texto enriquecido.   Pegar como texto sin formato

  Sólo se permiten 75 emoji.

×   Tu enlace se ha incrustado automáticamente..   Mostrar como un enlace en su lugar

×   Se ha restaurado el contenido anterior.   Limpiar editor

×   No se pueden pegar imágenes directamente. Carga o inserta imágenes desde la URL.

Cargando...
×
×
  • Crear nuevo...

Información importante

Términos de Uso