Problème avec le code du selecteur de cap

Questions de programmation / Offset FSUIPC et IOCP

Problème avec le code du selecteur de cap

Messagede FiX » Mer 5 Sep 2012 21:16

J'ai un drôle de problème avec le Heading Bug (qui porte bien son nom...), que je n'ai pourtant pas avec le selecteur de course (alors que c'est le même principe).

-Si le cap est à 0°
-Je tourne mon selecteur de cap vers la droite (par exemple 10°) => ça fonctionne
-J'arrête de le tourner
-Je recommence à le tourner dans la même direction (jusque 20°) => ça fonctionne toujours
-Si je recommence à le tourner juste d'un cran dans l'autre direction => il revient d'un seul coup à 0° au lieu de descendre d'un cran. gratgrat
(Et c'est la même chose de l'autre côté)

A partir du moment ou l'on reste du même côté de la boussole (entre 0 et 180 côté EST), le phénomène ne se produit qu'une seule fois, ensuite ça fonctionne normalement.
Mais si je repasse de l'autre côté de 0° (côté ouest), alors ça va recommencer (une seule fois également si je reste côté ouest)

J'y comprends rien!!! murrouge


Voilà mon code: (y'a le CRS, qui fonctionne lui, et ensuite le HDG)


Code: Tout sélectionner
Var 0510, Link FSUIPC_INOUT, Offset $0C4E, Length 2     // CRS NAV1, GRADU 0-359

Var 0511, Link IOCARD_SW, Input 6     // pusch

Var 0512, Link IOCARD_ENCODER, Input 3, Aceleration 1, Type 2
{
  IF V0511 = 1
  {
    IF V0512 > 0     // turn right
    {
      V0510 = V0510 + 10
      IF V0510 > 360
      {
        V0510 = 1   
      }
    }
    IF V0512 < 0     // turn left
    {
      V0510 = V0510 - 10
      IF V0510 < 1
      {
        V0510 = 360   
      }
    }
  }
  ELSE
  {
    IF V0512 > 0     // turn right
    {
      V0510 = V0510 + 1
      IF V0510 > 360
      {
        V0510 = 1   
      }
    }
    IF V0512 < 0     // turn left
    {
      V0510 = V0510 - 1
      IF V0510 < 1
      {
        V0510 = 360   
      }
    }
  }
}

Var 0505, Link FSUIPC_OUT, Offset $07CC, Length 2     // Heading Bug

Var 0506, Link IOCARD_SW, Input 5     // pusch Heading Bug

Var 0507, Link IOCARD_ENCODER, Input 7, Aceleration 1, Type 2
{
  IF V0506 = 1
  {
    IF V0507 > 0     // turn right
    {
      V0505 = V0505 - 1820
      IF V0505 > 65536
      {
        V0505 = V0505 - 65536
      }
    }
    IF V0507 < 0     // turn left
    {
      V0505 = V0505 + 1820
      IF V0505 < 1
      {
        V0505 = V0505 + 65536
      }
    }
  }
  ELSE
  {
    IF V0507 > 0     // turn right
    {
      V0505 = V0505 - 182
      IF V0505 > 65536
      {
        V0505 = 1   
      }
    }
    IF V0507 < 0     // turn left
    {
      V0505 = V0505 + 182
      IF V0505 < 1
      {
        V0505 = 65536   
      }
    }
  }
}
Dernière édition par FiX le Ven 26 Oct 2012 10:51, édité 1 fois.
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Problème avec le code du selecteur de cap

Messagede stevelep » Mer 5 Sep 2012 23:17

Salut,

Ton code me parait très compliqué, alors qu'il faut simplement utiliser la fonction ROTATE:
Pas besoin de IF ELSE, cette fonction fait tourner la valeur sur elle meme, c'est une limite en boucle
Ces 3 lignes devraient suffire:


Var 2634, Name encoder, Link IOCARD_ENCODER, Input 7, Aceleration 2, Type 2
{
&val_hdg = ROTATE 1, 360, &encoder
}

Var 2650, name val_hdg // converti le cap pour FS
{
L0 = &val_hdg * 182.04444
L0 = L0 + 1
&fs_hdg = L0
}

Var 2652, name fs_hdg, Link FSUIPC_INOUT, Offset $07CC, Length 2


BOB
Avatar de l’utilisateur
stevelep
Administrateur du site
 
Messages: 2075
Inscription: 27/03/09
Localisation: LSGN Neuchâtel, Suisse

Re: Problème avec le code du selecteur de cap

Messagede FiX » Mer 5 Sep 2012 23:27

etonneyeux
Bon...merci Bob...et bien le SIOC et moi, c'est pas gagné...
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Problème avec le code du selecteur de cap

Messagede Colibri » Mer 5 Sep 2012 23:32

Rassure-toi ... Ce n'est pas toi, c'est juste Bob qui vole bien plus haut que nous etonneyeux
Vincent
Avatar de l’utilisateur
Colibri
 
Messages: 1456
Inscription: 13/05/09
Localisation: Guérande (44)

Re: Problème avec le code du selecteur de cap

Messagede stevelep » Mer 5 Sep 2012 23:33

Je viens de corriger le code, j'avais oublié de copier-coller une ligne
pour convertir la valeur du cap en valeur FS

BOB
Avatar de l’utilisateur
stevelep
Administrateur du site
 
Messages: 2075
Inscription: 27/03/09
Localisation: LSGN Neuchâtel, Suisse

Re: Problème avec le code du selecteur de cap

Messagede FiX » Jeu 6 Sep 2012 00:00

Colibri a écrit:Rassure-toi ... Ce n'est pas toi, c'est juste Bob qui vole bien plus haut que nous etonneyeux


C'est hallucinant... etonneyeux
A croire qu'il aime ça! sourirebis

Ce qui est surtout flippant, c'est de se dire que s'il n'intervenait plus sur le forum, on serait tous bien mal barré!
Dernière édition par FiX le Jeu 6 Sep 2012 00:13, édité 1 fois.
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Problème avec le code du selecteur de cap

Messagede FiX » Jeu 6 Sep 2012 00:12

Je viens de trouver ça sur un site:

Code: Tout sélectionner
Var 0001, name HDG, Link FSUIPC_INOUT, Offset $07CC, Length 2    // Sélection de Cap

Var 0002, name AP_HDG_ROT, Link IOCARD_ENCODER, Input 4, Aceleration 2, Type 2    // Encod sélection HDG
{
  &HEADING = ROTATE 0 ,359 ,&AP_HDG_ROT
  &HDG = &HEADING * 182.04444
}

Var 0003, name HEADING, Value 0    // pour calcul valeur HDG



Celui-là, je le comprends à peu près.
Mais sur le tiens, bob, pourquoi as-tu ajouté le calcul L0 + 1 ? Ca sert à quoi d'ajouter 1 à la valeur du cap convertis?

Et autre chose, toi tu fais rotate de 1 à 360 et lui de 0 à 359. Quelle est la différence?
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Problème avec le code du selecteur de cap

Messagede stevelep » Jeu 6 Sep 2012 01:03

En lisant mon code, je me suis posé les mêmes questions ... et je me souviens plus du pourquoi.

Faut que je teste ça demain ...

BOB
Avatar de l’utilisateur
stevelep
Administrateur du site
 
Messages: 2075
Inscription: 27/03/09
Localisation: LSGN Neuchâtel, Suisse

Re: Problème avec le code du selecteur de cap

Messagede Colibri » Jeu 6 Sep 2012 12:45

FiX a écrit:
Colibri a écrit:Rassure-toi ... Ce n'est pas toi, c'est juste Bob qui vole bien plus haut que nous etonneyeux

Ce qui est surtout flippant, c'est de se dire que s'il n'intervenait plus sur le forum, on serait tous bien mal barré!

Bob, ceci est un message qui vient du coeur sourirebis
D'ailleurs, comment tu as fait pour connaître si bien le SIOC ? Je n'ai pour ma part jamais trouvé de liste exhaustive et/ou intelligible des fonctions, par exemple. Tu en as trouvé une, toi ?

Pour l'histoire du +1 et du 0-359 plutôt que 1-360, c'est forcément lié. Ce ne serait pas une question de valeur nulle qui provoquerait un bug quelque part ? (je dis çà à tout hasard ...)
Vincent
Avatar de l’utilisateur
Colibri
 
Messages: 1456
Inscription: 13/05/09
Localisation: Guérande (44)

Re: Problème avec le code du selecteur de cap

Messagede pierre01 » Jeu 6 Sep 2012 13:26

Voilà ce que dit la doc pour la fonction "rotate" :

Variable = ROTATE Parameter1 Parameter2 Parameter3

Increases or decreases the variable value with the value indicated by parameter3. When increase, if the result is higher than Parameter2, then variable = Parameter1. When decrease, if the result is lower than Parameter1, then variable = Parameter2.

This cyclic behavior is typical of gauges like VOR OBS.

Parameter1 : Variable, real constant or integer constant. Lower value.

Parameter2 : Variable, real constant or integer constant. Upper value.

Parameter3 : Variable, real constant or integer constant. Increment/Decrement.

Donc :
Si je comprend bien, la ligne de code de BOB : "&val_hdg = ROTATE 1, 360, &encoder" on a :
"1" = paramètre1
"360" = paramètre2 et
"&encoder" = paramètre3

Si le paramètre1 = 0 --> on peux avoir "&val_hdg" = 0
d'ou L0 dans "Var 2650, name val_hdg" = 0 * 182.04444 qui donne une valeur nulle ... et c'est peut-être le Pb ?
A+
Pierre.
Avatar de l’utilisateur
pierre01
 
Messages: 1775
Inscription: 19/04/09
Localisation: Vers Vesoul (Haute Saône)

Suivante

Retourner vers Programmation Sioc





Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 54 invités