SIOC/LUA : bouton état "pressé" ...

Questions de programmation / Offset FSUIPC et IOCP

SIOC/LUA : bouton état "pressé" ...

Messagede OscarDelta77 » Mar 4 Juil 2023 14:37

Bonjour,

Je suis sur un problème à priori simple, mais je ne trouve pas la solution.

Le but : l'appui sur le bouton test pour tester les voyants VAC, ALT et OIL.

Côté SIOC :
- Mon Switch est bien vu et fonctionne. S'il reste appuyé, la valeur est à 1, et retourne à 0 dès qu'il est lâché.
- La valeur est 1 ou 0 est envoyée à un OFFSET FSUIPC

Côté LUA/FSUIPC :
Je récupère bien la valeur 1 ou 0 mais : Soit elle reste figée à 1, avec les trois leds allumées (via Lvar du PA28 associées), soit cela s'allume et s'éteint tout de suite.
Je n'arrive pas avoir les 'états "Le bouton reste pressé" et "il est relâché"

Auriez-vous une piste ? Je n'ai pas le PC sous les yeux pour vous afficher le code.

Merci d'avance !
Dernière édition par OscarDelta77 le Sam 4 Nov 2023 01:09, édité 1 fois.
OscarDelta77
 
Messages: 96
Inscription: 19/02/14

Re: SIOC/LUA : bouton état "pressé" ...

Messagede fab » Mar 4 Juil 2023 15:47

Voir le code serait mieux je pense !

Rien d'autre ne peux agir sur les Lvar ?
Avatar de l’utilisateur
fab
 
Messages: 4417
Inscription: 26/12/12
Localisation: Roubaix

Re: SIOC/LUA : bouton état "pressé" ...

Messagede OscarDelta77 » Mar 4 Juil 2023 21:51

Hello,

Voici les bouts de code concernés.

Avec ce code,
- Je presse le bouton. Tant que le bouton est pressé, la valeur est bien à 1 dans SIOC
- SIOC envoie la valeur 1
- La lvar concerné est activée quelques millisecondes, puis retourne à 0
- Je récupère les valeurs (à 0 au lieu de 1) des trois Lvars qui correspondent au 3 leds...

J'ai essayé avec une boucle while, maic 'est leffet inverse :
- Je presse le bouton.
- SIOC envoie la valeur 1
- La lvar concerné est activée indéfiniment
- Je récupère les valeurs (à 0 1) des trois Lvars qui correspondent au 3 leds...
- Sans jamais revenir à 0



Côté SIOC :

Code: Tout sélectionner
Var 0335, name FS_PressTest, Link FSUIPC_INOUT, Offset $66C1, Length 1     // FS Switch Press Test

Var 0336, name SW_PRESSTEST, Link IOCARD_SW, Input 4, Type I     // SW PRESS TEST
{
  &FS_PressTest = &SW_PRESSTEST   
}


Et cöté FSUIPC :

Code: Tout sélectionner
function F_PRESS_TEST()

Sw_PressTest = ipc.readUB(0x66C1)

PressTest = Sw_PressTest

 wnd.text (w, "PressTest : " .. PressTest)
 
 if PressTest == 1 then
   
      ipc.writeLvar("LEFT_MISC_press_test",1)
      VacTest = ipc.readLvar("LEFT_MISC_vac")
      AltTest = ipc.readLvar("LEFT_MISC_vac")
      OilTest = ipc.readLvar("LEFT_MISC_vac")
      wnd.text (w, "Vac : " .. VacTest .. " / Alt : " .. AltTest .. " / Oil : " .. OilTest)
      
 end

end

event.offset(0x66C1, "UB", "F_PRESS_TEST")



Voilà pour les détails !

Edit : Il y a la méthode pas propre, une vilaine tricherie.
C'est moche, ça fait le job. Mais je n'ai pas la solution à mon problème...

Code: Tout sélectionner
if PressTest == 1 then
      for t = 0,150 do
         t=t+1
         ipc.writeLvar("LEFT_MISC_press_test",1)      
         VacTest = ipc.readLvar("LEFT_MISC_vac")
         AltTest = ipc.readLvar("LEFT_MISC_vac")
         OilTest = ipc.readLvar("LEFT_MISC_vac")
         wnd.text (w, "T : " .. t .. " / Vac : " .. VacTest .. " / Alt : " .. AltTest .. " / Oil : " .. OilTest)
      end
      ipc.writeLvar("LEFT_MISC_press_test",0)   
 end
OscarDelta77
 
Messages: 96
Inscription: 19/02/14

Re: SIOC/LUA : bouton état "pressé" ...

Messagede OscarDelta77 » Mar 4 Juil 2023 22:42

Bon, j'ai fini par trouver une lvar complémentaire.

Avec celle-ci, j'ai le comportement voulu sur le bouton. Mais ... Je ne récupère pas les valeurs des 3 lvars pour les leds.

Code: Tout sélectionner
function F_PRESS_TEST()

Sw_PressTest = ipc.readUB(0x66C1)

PressTest = Sw_PressTest
wnd.text (w, "PressTest : " .. PressTest)
 

if PressTest == 1 then
   ipc.writeLvar("LEFT_MISC_press_test_IsDown",1) -- avec cette valeur, le bouton reste bien pressé
   ipc.writeLvar("LEFT_MISC_press_test",1)   
   
       
   VacTest = ipc.readLvar("LEFT_MISC_vac") -- Ces tris variables restent muettes ...
   AltTest = ipc.readLvar("LEFT_MISC_vac")
   OilTest = ipc.readLvar("LEFT_MISC_vac")
   wnd.text (w, "Vac : " .. VacTest .. " / Alt : " .. AltTest .. " / Oil : " .. OilTest)
      
   
 else
   ipc.writeLvar("LEFT_MISC_press_test_IsDown",0)
   ipc.writeLvar("LEFT_MISC_press_test",0)   
   
end

end


Demain sera un autre jour !
OscarDelta77
 
Messages: 96
Inscription: 19/02/14

Re: SIOC/LUA : bouton état "pressé" ...

Messagede fab » Jeu 6 Juil 2023 11:13

J'suis pas un pro de LUA et je ne comprends pas ce que fait 3 fois la fonction de lecture de la même Lvar ? :

Code: Tout sélectionner
      VacTest = ipc.readLvar("LEFT_MISC_vac")
      AltTest = ipc.readLvar("LEFT_MISC_vac")
      OilTest = ipc.readLvar("LEFT_MISC_vac")


Ensuite, je ne comprends pas ce que tu cherches à faire ?

J'imagine que si tu appuies sur le bouton "test" tu souhaites voir touts les voyants s'allumer, si tu lâches le bouton "test", les voyants reprenne leur état d'origine.

La Lvar "LEFT_MISC_press_test" ne fait pas ça toute seule ?

( rappelle moi quel logiciel de simu tu utilises STP )
Avatar de l’utilisateur
fab
 
Messages: 4417
Inscription: 26/12/12
Localisation: Roubaix

Re: SIOC/LUA : bouton état "pressé" ...

Messagede OscarDelta77 » Ven 7 Juil 2023 08:43

Salut Fabien,

Je n'ai pas vu ton message hier, désolé.

Mon problème est résolu; faire une petit pause m'a fait du bien !

Pour répondre à tes questions :

-Comme tu as pu le voir, j'avais préparé mes trois variables, et oublié de renommer les Lvar associées. J'avais purgé le code des ,lignes inutiles, mais j'en ai oublié quelques unes.

- Tu as bien compris le comportement voulu. Les Lvar du PA28 de JustFlight ne sont pas documentées. Et leur support ne semble pas maîtriser la chose. En gros, Demerden sie sich. Comme j'utilise Spad.Next, j'ai utilisé le module qui permet de scruter les Lvar; et à force d'utiliser le bouton dans le cockpit (MSFS), j'ai trouvé la seconde variable : LEFT_MISC_press_test_IsDown qui fonctionne de pair avec LEFT_MISC_press_test

Du coup, maintenant, cela fonctionne parfaitement : chouettedoights Et ça fait bien plaisir ! Mais il me reste des choses à améliorer :

- J'ai voulu condenser mon circuit pour qu'il soit compact. Il l'est un peu trop; je n'ai pas pu mettre les connecteurs DUPONT sécurisés. Du coup, j'utilise j'ai du mettre des connecteurs basiques. Cela fonctionne, mais certains connecteurs femelles ne tiennent pas très bien. Je dois revoir mon circuit pour être tranquille.
- J'ai eu un défaut de soudure, que j'ai pu corriger.

En revanche, avoir pu déporter toute la partie électronique sur le circuit allège bien la pièce pour mon tableau de bord.

Au final, c'est tout de même pile-poil ce que je voulais !

Il ne me reste plus que la sérigraphie, et ce sera parfait.

Le code LUA :

Code: Tout sélectionner
function F_PRESS_TEST()

Sw_PressTest = ipc.readUB(0x66C1)
PressTest = Sw_PressTest

if PressTest == 1 then
      
   -- wnd.text (w, "Button : Pushed")
      
   ipc.writeLvar("LEFT_MISC_press_test_IsDown",1) -- Définit l'état du bouton
   ipc.writeLvar("LEFT_MISC_press_test",1)    -- On presse le bouton
            
   ipc.writeUB(0x66C2,1) -- TEST LED VAC
   ipc.writeUB(0x66C3,1) -- TEST LED ALT   
   ipc.writeUB(0x66C4,1) -- TEST LED OIL
         
else

   -- wnd.text (w, "Button : Released")
   
   ipc.writeLvar("LEFT_MISC_press_test_IsDown",0)
   ipc.writeLvar("LEFT_MISC_press_test",0)   

   ipc.writeUB(0x66C2,0) -- TEST LED VAC
   ipc.writeUB(0x66C3,0) -- TEST LED ALT   
   ipc.writeUB(0x66C4,0) -- TEST LED OIL
      
end

end

event.offset(0x66C1, "UB", "F_PRESS_TEST")



Et le code SIOC correspondant :

Code: Tout sélectionner
Var 0335, name FS_PressTest, Link FSUIPC_INOUT, Offset $66C1, Length 1     // FS Switch Press Test

Var 0336, name SW_PRESSTEST, Link IOCARD_SW, Input 4, Type I     // SW PRESS TEST
{
  &FS_PressTest = &SW_PRESSTEST   
}

Var 0337, name FS_LEDTESTVAC, Link FSUIPC_INOUT, Offset $66C2, Length 1     // FS LED TEST VAC
{
  &LED_TESTVAC = &FS_LEDTESTVAC   
}

Var 0338, name LED_TESTVAC, Link IOCARD_OUT, Output 11     // LED TEST VAC

Var 0339, name FS_LEDTESTALT, Link FSUIPC_INOUT, Offset $66C3, Length 1     // FS LED TEST ALT
{
  &LED_TESTALT = &FS_LEDTESTALT   
}

Var 0340, name LED_TESTALT, Link IOCARD_OUT, Output 12     // LED TEST ALT

Var 0341, name FS_LEDTESTOIL, Link FSUIPC_INOUT, Offset $66C4, Length 1     // FS LED TEST OIL
{
  &LED_TESTOIL = &FS_LEDTESTOIL   
}

Var 0342, name LED_TESTOIL, Link IOCARD_OUT, Output 13     // LED TEST OIL



Je suis désolé, je n'ai pas réussi à intégrer les images directement : tristounet

https://imgur.com/hDtNVZZ

https://imgur.com/zW8mqaF

Merci à tous ! merci affiche
OscarDelta77
 
Messages: 96
Inscription: 19/02/14

Re: SIOC/LUA : bouton état "pressé" ...

Messagede PapaLima » Mar 18 Juil 2023 00:20

Merci pour le partage ; j'avais déjà oublié l'idée d'échange entre LUA et SIOC via les offsets FSUIPC.

Question de curiosité : le code LUA, tu le charges dans FSUIPC ou bien autre comme LINDA par exemple ?

Bon courage pour la suite
Avatar de l’utilisateur
PapaLima
 
Messages: 816
Inscription: 14/04/16
Localisation: LFPG

Re: SIOC/LUA : bouton état "pressé" ...

Messagede OscarDelta77 » Sam 4 Nov 2023 01:09

Je suis désolé PapaLima, je n'avais pas vu ta réponse.

Mes échanges LUA se font exclusivement avec FSUIPC. J'avais essayé Linda fut un temps, mas je suis revenu à FSUIPC.
OscarDelta77
 
Messages: 96
Inscription: 19/02/14


Retourner vers Programmation Sioc





Qui est en ligne

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