Page 1 sur 2

Offset en virgule flottante et potentiomètre

MessagePosté: Sam 13 Jan 2018 20:56
de tabar57
Bonjour,

Peut être suis je un peu fatigué ou vieillissant mais je cherche la combine pour piloter un offset codé en virgule flottante ( float 32 bits ) à partir d'un potar.
Pour être clair, il s'agit de l'offset $320, il est donné comme non modifiable mais j'ai réussi à le modifier depuis la console IOCP.
Je souhaiterai modifier le taux de montée (ou de descente) de l'altitude cabine à partir d'un potentiomètre

Merci pour vos réponses

Cordialement

Bernard

Re: Offset en virgule flottante et potentiomètre

MessagePosté: Dim 14 Jan 2018 08:39
de fab
Je n'ai pas réussi non plus pour mes tests, à voir, SIOC utilise que des float en 64 bits ( offset d'une longueur de 8 octets)

Re: Offset en virgule flottante et potentiomètre

MessagePosté: Dim 14 Jan 2018 12:26
de stevelep
Je crois qu’on peux mais c’est un peu compliqué
Le principe c’est d’envoyer la valeur du pot 0-127 dans un offset libre
de FSUIPC (7000-...) de créer une macro en langage LUA de déclarer
ton offset en F32 et de lire ton offset 7000 et d’écrire la valeur sur
l’offset F32 moyennant une petite conversion.

Je l’ai jamais fait mais ça prend que 3-4 lignes de code

BOB

Re: Offset en virgule flottante et potentiomètre

MessagePosté: Dim 14 Jan 2018 12:30
de tabar57
Bonjour Steve,

Je suis preneur de cette macro pour l'étudier, si tu as le temps bien évidemment merci affiche


Bernard

Re: Offset en virgule flottante et potentiomètre

MessagePosté: Lun 15 Jan 2018 13:45
de PapaLima
Bernard

Tu as peut être un début de réponse là :
viewtopic.php?p=25560

a+

Re: Offset en virgule flottante et potentiomètre

MessagePosté: Lun 15 Jan 2018 14:37
de tabar57
Bonjour,

fab a écrit:Je n'ai pas réussi non plus pour mes tests, à voir, SIOC utilise que des float en 64 bits ( offset d'une longueur de 8 octets)


Pourtant ces variables ( 318 , 320 ...) sont données dans la table des offsets pour être de longueur 4 en float 32 bits gratgrat

Merci pour l'info Papalima, je vais regarder çà de plus près, il faut que j'arrive à retrouver cette routine de JL

Cordialement

Bernard

Re: Offset en virgule flottante et potentiomètre

MessagePosté: Lun 15 Jan 2018 14:41
de fab
tabar57 a écrit:Pourtant ces variables ( 318 , 320 ...) sont données dans la table des offsets pour être de longueur 4 en float 32 bits gratgrat
...


Oui, c'est bien des floats avec une longueur de 4 octets (4x8=32 bits), mais SIOC ne reconnait pas les floats en 32 bits

Re: Offset en virgule flottante et potentiomètre

MessagePosté: Mer 17 Jan 2018 11:05
de stevelep
Hello,

Comme dit précedemment je ne l'ai pas testé.

Mais le principe est inspiré de ce post sur les L:VARS: (page 1)
viewtopic.php?f=89&t=3709#

Le code donné permet de copier des L:VARS dans un offset FSUIPC et des offsets FSUIPC dans des L:VARS.

Ici on a pas besoin de L:VARS, donc rien ne t'empêche de copier un offsets FSUIPC (ton potentiomètre)
dans un autre offset FSUIPC (la variable que tu cherches à commander)

Voici le code à modifier (les parties en rouge sont inutile pour toi)
Evidemment il faut trouver le bon format de lecture et d'écriture
c'est ici les lettre UB et SD, il faut les remplacer pour le Float32

les formats de nombre dans LUA (fichier FSUIPC Lua Library dans dossier document de FSUIPC)

UB unsigned 8-bit byte
UW unsigned 16-bit word
UD unsigned 32-bit dword
SB signed 8-bit byte
SW signed 16-bit word
SD signed 32-bit dword
DD signed 64-bit value
DBL 64-bit double floating point
FLT 32-bit single floating point
STR string of ASCII characters


A suivre, dit moi si tu comprend quelque chose

BOB


while 1 do

-- Lecture des LVars
boost = ipc.readLvar("L:Eng1_MPGauge")
rad = ipc.readLvar("L:Eng1_WaterTempGauge")
rpm = ipc.readLvar("L:Eng1_RPMGauge")
ias = ipc.readLvar("L:AirspeedIndicatedNeedle")
vsi = ipc.readLvar("L:VerticalSpeed")


-- Lecture des offsets
vent = ipc.readUB(0x66E0)
oxalt = ipc.readUB(0x66E2)
oxsup = ipc.readUB(0x66E4)

-- formatage des valeurs
boost = boost * 100
if boost < -600 then
boost = -600
end
if rpm < 1000 then
rpm = 1000
end
if rad < 40 then
rad = 40
end
if ias < 50 then
ias = 50
end

roxalt = oxalt * 250

-- Ecriture dans Offsets Libres
ipc.writeSD(0x66c0, boost)
ipc.writeSD(0x66c4, rad)
ipc.writeSD(0x66c8, rpm)
ipc.writeSD(0x66D2, ias)
ipc.writeSD(0x66D6, vsi)

LVarSet = "L:CabinVent"
ipc.writeLvar(LVarSet,vent)
LVarSet = "L:OxyAltSetValve"
ipc.writeLvar(LVarSet,oxalt)
LVarSet = "L:OxyMaster"
ipc.writeLvar(LVarSet,oxsup)


ipc.sleep(68)

end

Re: Offset en virgule flottante et potentiomètre

MessagePosté: Mer 17 Jan 2018 18:03
de stevelep
En résumé ça doit ressembler à ça:

la variable pot lit l'offset libre où tu envoie la valeur de ton potentiomètre (0-225) (8bit non-signé=UB)
on multiplie pot par un coefficient pour transformer 0-255 en 0.0-1.0 (float32=FTL)
puis on écrit la valeur dans l'offset désiré pour commander FS.

while 1 do

-- Lecture de l'offset
pot = ipc.readUB(0x6600)

-- formatage des valeurs
coef = 1 / 255
value = pot * coef

-- Ecriture dans offset
ipc.writeFLT(0x0320, value)

ipc.sleep(68)

end

Re: Offset en virgule flottante et potentiomètre

MessagePosté: Jeu 18 Jan 2018 14:48
de tabar57
Merci Steve pour ta réponse, je vais décortiquer tout çà tranquillement et essayer de le digérer.
Il en ressort que c'est plus de la curiosité intellectuelle qu'autre chose, car régler un taux de montée cabine sur un simulateur faut déjà être pas mal atteint mais bon ... clownblanc

Bernard