la programmation de mes gauges fuel est faites depuis longtemps mais montait et descendait à la vitesse max du servo, donc pas très réaliste ..;
J'ai donc modifié mon programme SIOC pour intégrer une montée et descente lente quand je manœuvre "switch BAT" !
Ça marche très bien, sauf dans 2 cas bien précis :
Si je met "switch BAT" ON ou OFF et que j'attends que les gauges soient complètement établies, pas de Pb.
Si je met "switch BAT" ON et que je le remet OFF avant la montée complète des gauges, j'ai :
- La montée s'arrête et les gauges restent à cette position (ne repassent pas à "0").
- Il faut que je mette "switch BAT" sur ON, là les gauges finissent de monter, puis redescendent à "0" et y restent.
- Je remet "switch BAT" OFF puis ON pour retrouver une cohérence ...
- Idem pour l'inverse : "switch BAT" OFF, puis ON avant que les gauges soient à "0".
Un spécialiste (BOB au hasard), pourrait-il regarder mon code ?
J'ai utilisé la commande TIMER pour faire ça !
- Code: Tout sélectionner
//
// Fuel jauge left et Right
//
// Offset $0B7C et $0B94 Length 4 en % * 128 * 65536
// Graduation 0 à 100 %
// servo de 170 à 850 --> a = 6,8 b = 170
//
Var 4180, name fs_fuel_left, link FSUIPC_INOUT, Offset $0b7c, Length 4 // FSUIPC
{
CALL &sub_fuel_left // Calcul de la valeur à envoyer au servo
}
Var 4181, name sub_fuel_left, link subrutine
{
&val_fuel_left = &fs_fuel_left / 83886.08 // de 0 à 100% : 128 * 65536 / 100
L0 = &val_fuel_left * 6.8 // "a" (y = ax)
L1 = L0 + 170 // "b" (y = ax + b) -> nouvelle valeur servo
L1 = LIMIT 150 900 0 // Limite amplitude servo de 150 à 900
IF &courant = 0 // Si pas de courant
{
L1 = 170 // L1 = Valeur mini pour servo
}
&tmp_fuel_left = L1 - &old_fuel_left // Différence new - old valeur
L2 = 2 // Si &tmp_fuel_left >= 0 (évite un "IF")
// Sens de variation du servo (dans "TIMER")
IF &tmp_fuel_left < 0 // Si la nouvelle valeur servo < à l'ancienne
{
L2 = -2 // L2 négatif
}
IF &tmp_fuel_left <> 0 // Si le servo doit changer
{
&serv_Fuel_L = TIMER L1 L2 2 // Envoie valeur au servo par pas de 2 avec timer 2/10° de s
&old_fuel_left = L1 // Stok nouvelle valeur servo pour prochaine modif
}
}
Var 4182, name val_fuel_left // Valeur fuel en %
Var 4183, name old_fuel_left // mémorise ancienne valeur fuel
Var 4184, name tmp_fuel_left // Différence entre ancienne et nouvelle valeur du servo
Il y a une subroutine car appellée d'autre endroits !
Le temps de montée ou de descente est d'environ 7s pour le plein complet, très facilement modifiable par la valeur de L2 et du paramètre3 de la commande TIMER.
L2 prend une valeur 2 pour monter et -2 pour descendre et c'est beaucoup plus fluide qu'avec 1 ???
Et il y aura sûrement des simplifications

Merci d'avance !