Page 1 sur 3

Problème avec le code du selecteur de cap

MessagePosté: Mer 5 Sep 2012 21:16
de FiX
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   
      }
    }
  }
}

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

MessagePosté: Mer 5 Sep 2012 23:17
de stevelep
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

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

MessagePosté: Mer 5 Sep 2012 23:27
de FiX
etonneyeux
Bon...merci Bob...et bien le SIOC et moi, c'est pas gagné...

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

MessagePosté: Mer 5 Sep 2012 23:32
de Colibri
Rassure-toi ... Ce n'est pas toi, c'est juste Bob qui vole bien plus haut que nous etonneyeux

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

MessagePosté: Mer 5 Sep 2012 23:33
de stevelep
Je viens de corriger le code, j'avais oublié de copier-coller une ligne
pour convertir la valeur du cap en valeur FS

BOB

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

MessagePosté: Jeu 6 Sep 2012 00:00
de FiX
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é!

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

MessagePosté: Jeu 6 Sep 2012 00:12
de FiX
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?

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

MessagePosté: Jeu 6 Sep 2012 01:03
de stevelep
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

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

MessagePosté: Jeu 6 Sep 2012 12:45
de Colibri
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 ...)

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

MessagePosté: Jeu 6 Sep 2012 13:26
de pierre01
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 ?