Problème avec le code du selecteur de cap

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.
(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!!!
Voilà mon code: (y'a le CRS, qui fonctionne lui, et ensuite le HDG)
-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.

(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!!!

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
}
}
}
}