Sioc utiliser une carte USB DCMOTOR pour un autothrottle

mameloose

PILOTE DE BROUSSE
Messages
3 741
Réactions
2
Points
530
bonjour a tous !
un nouveau tuto pour utiliser la carte usbdcmotor dopencockpit !

la carte se presente comme ca :



pour la connection il suffit de suivre ce shema c'est très simple



on peut donc connecter jusqua 6 moteurs de 5 a 36volts ainsi que 4 potentiometres (on verra pourquoi les potentiometres par la suite ... )

ok donc avant de brancher votre carte en usb sur votre PC je conseil d'abord de l'alimenter (chez moi j'ai mis du 5 volts)
parce que sinon la carte risque de ne pas etre reconnue !

bref une fois votre carte branchée vous devriez voir ca dans sioc :



donc on voit bien que la carte na pas de numero didx et que mon port usb est le 50 chez vous ca sera different bien sur !

maintenant il faut declarer votre carte dans le sioc ini !
pour les carte usb expansion on a lhabitude de voir un truc du genre [master 0,4,1,45]
pour une carte usbdcmotor il suffit juste d'ajouter cette ligne :
[USBDCmotor=0,50]

voila j'ai mis 0 pour lidx et 50 comme c'est le chiffre de detection de mon port usb...

ensuite j'ai cablé un potentiometre de type 10K sur J3 et un motoreducteur sur les premiers pin de J6

NOUS ALLONS MAINTENANT FAIRE UNE PROG POUR UN AUTOTHROTTLE !
le but est que les manettes de gaz bougent toutes seules comme en vrai !

allez c'est partit ! nous allons commencer par ouvrir un code vierge et declarer les variables qui vont bien ....

comme d'habitude EDIT et NEWVAR


on commence par declarer notre moteur qui est cablé sur lemplacement numero 1




voila ensuite je vais declarer quelques variables pour controller les manettes de gaz avec mon potentiometre !

je cherche donc toujours dans le sdk les variables pour controller les manettes 1 et 2 (on va prendre un 737 pour l'exemple)

ici la $088C et la $0924 de longueur 2 respectivement pour le controle de la manette 1 et 2

donc a la suite dans mon code toujours EDIT NEWVAR et je selectionne fsuipcinout




ok ca va tout le monde suit ??

une derniere declaration : mon potar bien sur qui va controler mes manettes
ATTENTION une petite nuance avec mon precedant tuto sur les potentiometres : etant donné qu'on se situe sur une carte motor et non expension il faut selectionner notre potar comme un usbanalogic input et non comme un analogic tout court



voila puis ensuite je declare les butées .... alors encore une fois en fonction de votre installation les butées seront differentes ici je vais mettre les butées max puisque c'est une maquette pour l'exemple ; donc 0,127,255 .



VOILA tout est declaré ! maintenant on passe au code ..... gnak gnak un petit café simpose ou une desperados ca depends de l'heure qu'il est ;)

allez on passe au chose serieuse

Tout d'abord nous allons faire comprendre a sioc que le potard doit faire bouger mes deux manettes ! pour cela c'est très simple un clic droit sur le potar et NEWCOMMAND



donc une commande dassignation qui dit que le moteur 1 est egale a la valeur de mon potar multiplié par 64 !

et la ont dit tous en chur : pourquoi faut multiiiipllliiieeeerrr ??
c'est tout simple la valeur de notre potar va de 0 a 255
alors que notre moteur dans le sdk on nous explique quel va de 0 a 16383
donc logiquement pour que les deux plages soient les memes on divise 16383 par 255 et la magie ca donne 64 !!

voila on fait pareil pour le moteur 2 donc mon potar va controller les deux moteurs en meme temps chez vous rien nempeche de faire la manip avec 2 potentiometres ...



voila donc a ce stade on oublie pas denregistrer et vous pouvez essayer chez vous le potar fait bouger les manettes de gaz !
waouh !

alors maintenant en imaginant que vous avez un moteur relié sur vos manettes comme en vrai on passe a la suite !

le but et de faire comprendre a sioc maintenant que dès l'instant ou lA/T arm est activé le moteur tourne dans un sens pour donner de la puissance ; qu'il sarrete si il se trouve dans la bonne position et au contraire qu'il tourne dans l'autre sens pour reduire les gaz !!

nous allons creer une petite subroutine pour controller tout ca !

du coup EDIT NEW VAR et SUBROUTINE



voila bon maintenant je vais essayé d'être le plus clair possible !

en gros quand l'autothrottle demande de la puissance il va y avoir un decallage entre la position de mon potar et de mon moteur .
comme on a vu avant mon potar a 0 les gaz sont aux ralentit et a 255 ils sont a fond ! donc si le PA demande d'aller a fond et que mon potar est a zero le moteur va se mettre en marche pour rattraper cette course .

je vais donc utiliser des variables locales pour faire fonctionner ce s'ysteme .

clic droit sur la subroutine et NEWCOMMAND



donc ici LO est egale a la puissance moteur divisée par 64 (pour avoir la meme valeur que mon potar)

on peut comparer LO a X comme dans une equation mathematique il nous servira pour après ....
puis on continu


ici L1 est egal a LO moins la valeur du potar !
bon ok ca se complique mais c'est simple en gros la resultante est de zero si tout va bien ! ca veut dire que si les gaz sont dans une position fixe que le potar est au bon endroit alors le moteur ne tournera pas ! par contre si une des conditions change alors le moteur devra bouger dans un sens ou l'autre ...

donc je vais prendre une petite marge de securité de 10 je m'explique ... si je poursuit mon code normalement en gros si L1 et plus grand que zero alors le moteur va tourner dans un sens puis si L1 est plus petit que zero dans l'autre sens !
le probleme c'est qu'il fait ca sans ARRET !! donc surchauffe et tout donc on va rajouter une petite marge de secu pour eviter cela :




ok donc ici si une condition change c'est a dire si l'autothrottle demande a bouger la valeur de L1 va changer et si elle depasse 10 le moteur se mettera en marche jusqua ce que le potar suit pour saligner (nos manettes en gros)

alors pourquoi 127 pour le moteur ??

les conditions de controle du moteur sont de 0 a 127 et de 128 a 255 .
a 0 le moteur est arreté et plus on va vers 127 plus il tourne vite dans un sens
a 128 le moteur est arreté et plus on va vers 255 plus il tourne vite dans l'autre sens !

on peut ajuster la vitesse en mettant la valeur que lon veut ! moi j'ai mis a fond pour l'exemple !

ensuite je poursuit le code pour le contraire dans le cas d'une deceleration

nouvelle condition IF reclic droit sur la subroutine ...



ici si L1 est inferieur a -10 le moteur tournera a fond dans l'autre sens (255)

on poursuit pour larret du moteur donc si L1 est a zero et que tout est aligné donc mes manettes et le moteur ...





voila et pour finir comme nous sommes dans une subroutine il faut faire des appels sur les elements concernés donc le moteur 1 et LENG 1

du coup clic droit sur chaque variable et call subroutine



et voila ca fonctionne !

un autothrottle comme en vrai !
le principe est le meme pour une roue de trim par exemple ect ....
 
Et pour séparer les deux manettes il te faut un autre Motoréducteur branché sur un autre potar?
 
Oui tu peux faire ça mais je crois quen vrai il n'y a qu'un moteur pour les deux manettes à  vérifier...
 
Salut mameloose,

bon ben la je seche je n'y arrive pas , quand je vais dans sioc monitor pour faire bouger mes moteurs, j ai un débattement tres court de 126 à  128 et ils sont à  fond à  gauche ou à  droite.

j ai testé ton tuto mais je n arrive à  rien.

Helpp encore

aurais-tu ton code juste que je test pour être certain de ne rien avoir oublié ?

merci
 
salut
quel moteur utilises tu ? et quelle alimentation exactement ?
 
Hello mameloose

j'avais pas vu ton input :p

En fait c est un ancien TQ rsp platinium mais la carte avec drivers standard a cramé.Donc je l a transforme avec une carte DC motors et carte joystick leo bodnard.

J ai gardé la même alimentation qu il y avait pour ce TQ (12V)
Tout est recablé ,backlight,moteurs potards,interrupteurs , quand je teste mes moteurs avec sioc monitors le débattement est quasi nul 127 à  128 alors que les potards en bas à  gauche tourne bien de 0 à  255

ps: j'ai testé du coup les script sioc de chez RSP ils marchent pour un autre TQ que j avais déja transformé comme ça.
mais la javoue je suis pommé.

au pire j ai un teamviewer

merci pour ton aide :)
 
Merci pour ce cours de SIOC que je n'avais pas vu passer !
Total respect her professor mameloose!!!
 
PapaLima a dit:
Merci pour ce cours de SIOC que je n'avais pas vu passer !
Total respect her professor mameloose!!!

merci :D

ce n'est pas normale que ton debattement soit nul .... es tu sur que c'est un dcmotor et non pas un moteur pas a pas?

peux tu prendre une photo du moteur ?
 
oui pas de problème , je te fais parvenir ca tt à  l'heure.mais je suis quasiment sûr de moi
 
non puis en y reflechissant j ai bien juste 1 plus et un moins sur chaque moteur j en ai pas 3 ou4

donc c est bien des moteur dc :/
 
parce que normalement dans sioc monitor si tu vas de 0 a 127 le moteur tourne plus ou moins vite dans un sens et de 128 a 255 la même chose dans l'autre sens .

la particularité c'est qu'il y a une sécurité avec la carte dcmotor si ton moteur force de trop alors elle coupe l'alim moteur ce qui fait qu'il commence a se lancer puis sarrête.

si c'est la cas ton alim n'est pas assez puissante .
par contre attention a ne pas dépasser 1 ampere pour l'alim sinon le petit micro pic va cramé ça met arrivé ... si ton moteur doit fournir trop de puissance par rapport a ce qui est demandé alors il faut changer ton moteur pour un motoreducteur avec un rapport plus grand .
c'etait le cas chez moi pour bouger les 4 manettes la force est grande et mon premier moteur n'avait pas la force du coup j'ai changé je suis passé d'un rapport de 1/10 a 1/3000
 
a la rigueur essaye de desacoupler ton moteur et dit moi ce que ca donne avec sioc monitor
 
voici :)
1549970403_odgfo0kx.jpg
 
ok je vais essayer ca mais le truc c est que j arrive bien a faire aller mes manettes au minimum et maximum avec sioc monitor mais c est juste que je dois pas bouger enormement pour que ca le fasse.

exemple je suis sur 125 je bouge sur 128 la manete fait toute la course . je reviens sur 125 et hop il revient a sa place du debut
 
rodaure a dit:
ok je vais essayer ca mais le truc c est que j arrive bien a faire aller mes manettes au minimum et maximum avec sioc monitor mais c est juste que je dois pas bouger enormement pour que ca le fasse.

exemple je suis sur 125 je bouge sur 128 la manete fait toute la course . je reviens sur 125 et hop il revient a sa place du debut

je comprend pas tu parle de la valeur moteur ou du potar ?
 
e parle de ma valeur moteur.

si je mets min curseue a 0 bon la ca bouge pas.
50 idem
100 idem
126 hop le moteur part jusqu au bout de sa course si je vais sur 127 il va plus vite

si je passe de 0 a 255 d un coup ou de 255 a 0 rapidement il bouge pas.
 
rodaure a dit:
e parle de ma valeur moteur.

si je mets min curseue a 0 bon la ca bouge pas.
50 idem
100 idem
126 hop le moteur part jusqu au bout de sa course si je vais sur 127 il va plus vite

si je passe de 0 a 255 d un coup ou de 255 a 0 rapidement il bouge pas.

bah tout est normale alors !
attention les valeurs moteur en gros c'est ON OFF donc 127 dans un sens et 255 dans l'autre ce sont tes potentiometres qui vont reguler larret de ton moteur au bon moment .

tu coup a quoi ressemble le code que tu as fait ?
 
Ben du coup je ne comprends pas, j avais balancé ce code sur un TQ rsp qui avait déja une carte sioc , ca marchait trés bien.

Et sur celui-la ca ne marche .

BOn le code est pas commenté c est celui de chez RN

Code:
// *****************************************************************************
// * Config_SIOC ver 4.5   -     By Manuel Velez    -    
// *****************************************************************************
// * FileName : sioc.txt
// * Date : 15/04/2016



Var 0001, name MCPstatus, Link FSUIPC_INOUT, Offset $04F0, Length 2
{
  &ATengage = TESTBIT &MCPstatus ,11
  &CMDA = TESTBIT &MCPstatus ,8
  &CMDB = TESTBIT &MCPstatus ,9
}

Var 0002, name ATengage

Var 0003, name ThrottleMan1, Link FSUIPC_OUT, Offset $089A, Length 2
{
  &threskideger = DELAY &ThrottleMan1 ,100
  IF &ThrottleMan1 <> &threskideger
  {
    CALL &potfarkcalc
  }
}

Var 0004, name ThrottleMan2, Link FSUIPC_OUT, Offset $0932, Length 2
{
  &threskideger = DELAY &ThrottleMan2 ,100
  IF &ThrottleMan2 <> &threskideger
  {
    CALL &potfarkcalc2
  }
}

Var 0005, name FMAannounce, Link FSUIPC_IN, Offset $0505, Length 1
{
  L0 = &FMAannounce AND 15
  &Thrmode = L0    
}

Var 0006, name Thrmode

Var 0007, name Leverdiscon, Link FSUIPC_INOUT, Offset $310A, Length 1

Var 0008, name togabutton, Link FSUIPC_INOUT, Offset $04F2, Length 2

Var 0010, name Motor_1, Link USB_DCMOTOR, Device 1, Output 1

Var 0011, name A1, Link USB_ANALOGIC, Device 1, Input 1, PosL 0, PosC 122, PosR 255
{
  IF &ATengage = 1
  {
    IF &A1 < &potfark
    {
      CALL &ThrMotionFWD
    }
    IF &A1 > &potfark
    {
      CALL &ThrMotionBACK
    }
    IF &A1 < &potplus
    {
      IF &A1 > &potminus
      {
        &Motor_1 = 0    
      }
    }
    &A1eski = DELAY &A1 ,50
    &A1fark = &A1 - &A1eski
    &A1fark = ABS &A1fark
  }
  IF &ATengage = 0
  {
    &ThrottleMan1 = &A1 / 0.0154
    &ThrottleMan2 = &A2 / 0.0154
    CALL &MotorStop
  }
}

Var 0012, name potfark
{
  IF &ATengage = 1
  {
    IF &A1 < &potfark
    {
      CALL &ThrMotionFWD
    }
    IF &A1 > &potfark
    {
      CALL &ThrMotionBACK
    }
    IF &A1 < &potplus
    {
      IF &A1 > &potminus
      {
        &Motor_1 = 0    
      }
    }
  }
  IF &ATengage = 0
  {
    CALL &MotorStop
  }
}

Var 0015, name threskideger

Var 0020, name throttleMot1, Link FSUIPC_IN, Offset $088C, Length 2, Type 1
{
  &threskideger = DELAY &throttleMot1 ,100
  IF &throttleMot1 <> &threskideger
  {
    CALL &potfarkcalc
  }
  IF &throttleMot1 < 0
  {
    IF &IASCalc > 65
    {
      IF &SpoilerFS <= 4800
      {
        IF &AcOnGrd = 1
        {
          CALL &SpdBrkOpen
        }
      }
    }
  }
  IF &throttleMot1 > 500
  {
    IF &SpoilerFS > 13000
    {
      IF &AcOnGrd = 1
      {
        CALL &SpdBrkClose
      }
    }
  }
}

Var 0023, name Motor_2, Link USB_DCMOTOR, Device 1, Output 2

Var 0024, name A2, Link USB_ANALOGIC, Device 1, Input 2, PosL 10, PosC 122, PosR 255
{
  IF &ATengage = 1
  {
    IF &A2 < &potfark2
    {
      CALL &ThrMotionFWD2
    }
    IF &A2 > &potfark2
    {
      CALL &ThrMotionBACK2
    }
    IF &A2 < &potplus2
    {
      IF &A2 > &potminus2
      {
        &Motor_2 = 0    
      }
    }
    &A2eski = DELAY &A2 ,50
    &A2fark = &A2 - &A2eski
    &A2fark = ABS &A2fark
  }
  IF &ATengage = 0
  {
    CALL &MotorStop
  }
}

Var 0025, name potfark2
{
  IF &ATengage = 1
  {
    IF &A2 < &potfark2
    {
      CALL &ThrMotionFWD2
    }
    IF &A2 > &potfark2
    {
      CALL &ThrMotionBACK2
    }
    IF &A2 < &potplus2
    {
      IF &A2 > &potminus2
      {
        &Motor_2 = 0    
      }
    }
  }
  IF &ATengage = 0
  {
    CALL &MotorStop
  }
}

Var 0029, name throttleMot2, Link FSUIPC_IN, Offset $0924, Length 2, Type 1
{
  &threskideger = DELAY &throttleMot1 ,100
  IF &throttleMot1 <> &threskideger
  {
    CALL &potfarkcalc2
  }
  IF &throttleMot2 < 0
  {
    IF &IASCalc > 65
    {
      IF &SpoilerFS <= 4800
      {
        IF &AcOnGrd = 1
        {
          CALL &SpdBrkOpen
        }
      }
    }
  }
  IF &throttleMot2 > 500
  {
    IF &SpoilerFS > 13000
    {
      IF &AcOnGrd = 1
      {
        CALL &SpdBrkClose
      }
    }
  }
}

Var 0030, name potminus

Var 0032, name potplus

Var 0033, name potminus2

Var 0031, name potplus2

Var 0040, name FSIAS, Link FSUIPC_IN, Offset $02BC, Length 4
{
  &IASCalc = &FSIAS / 128
}

Var 0041, name IASCalc

Var 0050, name GrdAlt, Link FSUIPC_INOUT, Offset $31E4, Length 4
{
  L0 = &GrdAlt / 65536
  &GALT = L0 / 0.305
}

Var 0051, name GALT

Var 0052, name AcOnGrd, Link FSUIPC_INOUT, Offset $0366, Length 2

Var 0061, name SpdBrkMotor, Link USB_DCMOTOR, Device 1, Output 5

Var 0063, name SpoilerFS, Link FSUIPC_INOUT, Offset $0BD0, Length 4

Var 0065, name IAS_PM, Link FSUIPC_IN, Offset $04E0, Length 2
{
  IF &IAS_PM > 0
  {
    CALL &potfarkcalc
    CALL &potfarkcalc2
  }
  &PMeski = DELAY &IAS_PM ,200
  &PMfark = &PMeski - &IAS_PM
}

Var 0066, name PMeski

Var 0067, name PMfark
{
  IF &PMfark > 10
  {
    IF &ATengage = 1
    {
      CALL &ThrMotionBACK
      CALL &ThrMotionBACK2
    }
  }
  IF &PMfark < -10
  {
    IF &ATengage = 1
    {
      CALL &ThrMotionFWD
      CALL &ThrMotionFWD2
    }
  }
}

Var 0069, name flappos, Link FSUIPC_INOUT, Offset $0BDC, Length 4

Var 0070, name trim, Link FSUIPC_INOUT, Offset $0BC0, Length 2
{
  &trimeski = DELAY &trim ,20
  &trimfark = &trim - &trimeski
}

Var 0071, name trimmotor, Link USB_DCMOTOR, Device 1, Output 3

Var 0072, name trimeski

Var 0073, name trimfark
{
  IF &trimfark > 50
  {
    IF &CMDA OR &CMDB
    {
      &trimmotor = 60    
      &trimmotor = DELAY 0 ,400
    }
    IF &CMDA = 0
    {
      IF &CMDB = 0
      {
        &trimmotor = 120    
        &trimmotor = DELAY 0 ,400
      }
    }
  }
  IF &trimfark < -50
  {
    IF &CMDA OR &CMDB
    {
      &trimmotor = 185    
      &trimmotor = DELAY 0 ,400
    }
    IF &CMDA = 0
    {
      IF &CMDB = 0
      {
        &trimmotor = 240    
        &trimmotor = DELAY 0 ,400
      }
    }
  }
}

Var 0074, name trimindmotor, Link USB_DCMOTOR, Device 1, Output 4

Var 0075, name trimindpot, Link USB_ANALOGIC, Device 1, Input 3, PosL 10, PosC 122, PosR 255
{
  IF &trimindpot < &trimcalc
  {
    &trimindmotor = 35    
  }
  IF &trimindpot > &trimcalc
  {
    &trimindmotor = 150    
  }
  IF &trimindpot < &indpotplus
  {
    IF &trimindpot > &indpotminus
    {
      &trimindmotor = 0    
    }
  }
  &indpotplus = &trimcalc + 3
  &indpotminus = &trimcalc - 3
}

Var 0076, name trimindtest, Link FSUIPC_IN, Offset $2EA0, Length 8, Numbers 3
{
  L0 = &trimindtest + 66
  L1 = L0 / 1.42
  L1 = ABS L1
  &trimcalc = L1    
}

Var 0077, name trimcalc
{
  IF &trimindpot < &trimcalc
  {
    &trimindmotor = 35    
  }
  IF &trimindpot > &trimcalc
  {
    &trimindmotor = 150    
  }
  IF &trimindpot < &indpotplus
  {
    IF &trimindpot > &indpotminus
    {
      &trimindmotor = 0    
    }
  }
  &indpotplus = &trimcalc + 1
  &indpotminus = &trimcalc - 1
}

Var 0200, name CMDA

Var 0201, name CMDB

Var 0078, name indpotplus

Var 0079, name indpotminus

Var 0080, name splrcontMOTOR, Link USB_DCMOTOR, Device 1, Output 6

Var 0081, name angle
{
  IF &angle >= 70
  {
    IF &ATengage = 1
    {
      &at = SETBIT 20
      &at = DELAY 0 ,50
    }
  }
}

Var 0083, name at, Link FSUIPC_INOUT, Offset $5410, Length 4

Var 0086, name A1eski

Var 0087, name A2eski

Var 0088, name A1fark
{
  IF &A1fark > 10
  {
    IF &ATengage = 1
    {
      &Leverdiscon = 0    
      &ThrottleMan1 = &A1 / 0.0154
      &Leverdiscon = DELAY 192 ,200
    }
  }
}

Var 0089, name A2fark
{
  IF &A2fark > 10
  {
    IF &ATengage = 1
    {
      &Leverdiscon = 0    
      &ThrottleMan2 = &A2 / 0.0154
      &Leverdiscon = DELAY 192 ,200
    }
  }
}

Var 0090, name ParkBrkOfset, Link FSUIPC_INOUT, Offset $0BC8, Length 2
{
  IF &ParkBrkOfset = 0
  {
    &splrcontMOTOR = 250    
    &splrcontMOTOR = DELAY 0 ,100
    &splrcontMOTOR = DELAY 120 ,200
    &splrcontMOTOR = DELAY 0 ,300
  }
}

Var 0100, name potfarkcalc, Link SUBRUTINE
{
  &potfark = &throttleMot1 * 0.0154
  &potplus = &potfark + 3
  &potminus = &potfark - 3
}

Var 0101, name potfarkcalc2, Link SUBRUTINE
{
  &potfark2 = &throttleMot2 * 0.0154
  &potplus2 = &potfark2 + 3
  &potminus2 = &potfark2 - 3
}

Var 0110, name ThrMotionFWD, Link SUBRUTINE
{
  IF &Thrmode = 2
  {
    &Motor_1 = 45    
  }
  IF &Thrmode = 3
  {
    &Motor_1 = 45    
  }
  IF &Thrmode = 6
  {
    &Motor_1 = 45    
  }
  IF &Thrmode = 9
  {
    &Motor_1 = 45    
  }
  IF &Thrmode = 1
  {
    CALL &MotorStop
  }
  IF &Thrmode = 5
  {
    &Motor_1 = 45    
  }
}

Var 0111, name ThrMotionFWD2, Link SUBRUTINE
{
  IF &Thrmode = 2
  {
    &Motor_2 = 45    
  }
  IF &Thrmode = 3
  {
    &Motor_2 = 45    
  }
  IF &Thrmode = 6
  {
    &Motor_2 = 45    
  }
  IF &Thrmode = 9
  {
    &Motor_2 = 45    
  }
  IF &Thrmode = 1
  {
    CALL &MotorStop
  }
  IF &Thrmode = 5
  {
    &Motor_2 = 45    
  }
}

Var 0112, name ThrMotionBACK, Link SUBRUTINE
{
  IF &Thrmode = 2
  {
    &Motor_1 = 175    
  }
  IF &Thrmode = 3
  {
    &Motor_1 = 175    
  }
  IF &Thrmode = 9
  {
    &Motor_1 = 175    
  }
  IF &Thrmode = 4
  {
    IF &GALT < 80
    {
      &Leverdiscon = SETBIT 3
      &Motor_1 = 195    
      &Motor_1 = DELAY 0 ,800
    }
  }
  IF &Thrmode = 8
  {
    IF &GALT < 80
    {
      &Leverdiscon = SETBIT 3
      &Motor_1 = 195    
      &Motor_1 = DELAY 0 ,800
    }
  }
  IF &Thrmode = 1
  {
    CALL &MotorStop
  }
  IF &Thrmode = 5
  {
    &Motor_1 = 175    
  }
}

Var 0113, name ThrMotionBACK2, Link SUBRUTINE
{
  IF &Thrmode = 2
  {
    &Motor_2 = 165    
  }
  IF &Thrmode = 3
  {
    &Motor_2 = 165    
  }
  IF &Thrmode = 9
  {
    &Motor_2 = 165    
  }
  IF &Thrmode = 4
  {
    IF &GALT < 80
    {
      &Leverdiscon = SETBIT 3
      &Motor_2 = 195    
      &Motor_2 = DELAY 0 ,800
    }
  }
  IF &Thrmode = 8
  {
    IF &GALT < 80
    {
      &Leverdiscon = SETBIT 3
      &Motor_2 = 195    
      &Motor_2 = DELAY 0 ,800
    }
  }
  IF &Thrmode = 1
  {
    CALL &MotorStop
  }
  IF &Thrmode = 5
  {
    &Motor_2 = 165    
  }
}

Var 0120, name MotorStop, Link SUBRUTINE
{
  &Leverdiscon = 0    
  &Motor_1 = 0    
  &Motor_2 = 0    
}

Var 0125, name SpdBrkOpen, Link SUBRUTINE
{
  &SpdBrkMotor = DELAY 120 ,100
  &SpdBrkMotor = DELAY 0 ,400
}

Var 0130, name SpdBrkClose, Link SUBRUTINE
{
  &SpdBrkMotor = DELAY 190 ,100
  &SpdBrkMotor = DELAY 0 ,300
}

Var 0131, name gearcontrol, Link FSUIPC_INOUT, Offset $0BE8, Length 4
{
  IF &gearcontrol = 0
  {
    &splrcontMOTOR = 250    
    &splrcontMOTOR = DELAY 0 ,100
  }
}
 
oula ....
bon on va faire simple donne moi le nombre de moteur que tu as leur numero dentrée puis donne moi tes potar leur entrée et les valeurs de chaque potar en mini et en maxi
 
Moteur pilote : potard de 0 à  255 (entrée 1 moteur et portard sur carte)
copilot : potard de 0 à  255 (entrée deux)

la suite dans 5mns le temps de tout recabler


merci encore mameloose ;-)
 
ta carte dcmotor est en idx combien ? tu as pile 0 a 255 pour les potar ?
 
yes pile 0 sur les deux potard

idx 0 device 116

je te donne le reste tr a l heure j ai le pc qui me fait des siennes maintenant rrrrrrrrr

en gros j ai 6 moteurs

1 pour la manette pilote
1 pour la manette co-pilot
1 qui gere lenparking break
1 qui gere le spoilers
1 qui gere les roues de trim
et 1 pour les trims

j ai verifie mon alim est en 2A donc ca chauffe et je me demande si ca fait pas deconner ma carte.
 
Si le moteur force oui ça peux cramer...
Mais c'est pas un 747 que tu refais ? Tu as juste 2 manettes de puissance ?
 
Bonsoir à  tous,
je travaille en ce moment sur un autothrottle prosim 737. Pour cela, je possède la carte opencockpit usb dc card. J'ai suivi un tuto que j'avais trouvé sur ce site mais une fois l'autothrottle activé, mon moteur ne fait que de tourner et ne sarrête pas. J'ai bien cabler le potar et le moteur. Avez vous déjà  essayer de le faire avec le prosim 737 ?

Merci à  tous et bonne soirée :)
 
Je m inspire de celui ci

Code:
Var 0000, name Inicia, Value 0     // Initialization for TIMER
{
  &TimerTrim = -999999    
  &TimerTrim = TIMER 999999 ,1 ,300
}

Var 0010, name Version, Link IOCP, Offset 0     // Version

Var 0011, name Lever1_Pot, Link IOCP, Offset 1     // Lever 1
{
  L1 = &Lever1_Pot    
  IF &AutoThrottle = 0
  {
    IF &THrev1 = 1
    {
      L1 = -4096    
    }
    IF &ENGINENUMBERS = 2
    {
      &Lever1_to_FS = L1         // Send Lever1 Position to FS 
    }
    IF &ENGINENUMBERS = 4
    {
      &Lever1_to_FS = L1         // Send Lever1 Position to FS 
    }
  }
}

Var 0012, name Lever2_Pot, Link IOCP, Offset 2     // Lever 2
{
  L1 = &Lever2_Pot    
  IF &AutoThrottle = 0
  {
    IF &THrev2 = 1
    {
      L1 = -4096    
    }
    IF &ENGINENUMBERS = 2
    {
      &Lever2_to_FS = L1         // Send Lever1 Position to FS 
    }
    IF &ENGINENUMBERS = 4
    {
      &Lever2_to_FS = L1         // Send Lever1 Position to FS  
    }
  }
}

Var 0013, name THautoth, Link IOCP, Offset 21     // AutoThrottle s'ystem

Var 0014, name THpos1, Link IOCP, Offset 13     // Pos for Lever 1

Var 0015, name THpos2, Link IOCP, Offset 14     // Pos for Lever 2

Var 0016, name THflaps, Link IOCP, Offset 5     // Flaps 
{
  &fs_flaps = &THflaps    
}

Var 0017, name THtoga, Link IOCP, Offset 31     // TOGA buttom
{
  IF &THtoga = 1
  {
    IF &TOGA = 1
    {
      &TOGA = 0    
    }
    ELSE
    {
      &TOGA = 1    
    }
  }
}

Var 0018, name THATdisengage, Link IOCP, Offset 30     // AT DISENGAGE buttom
{
  IF &THATdisengage = 1
  {
    &TOGA = 0    
    &AutoThrottle = 0    
  }
}

Var 0019, name THproblèmerake, Link IOCP, Offset 26     // Parking Brake
{
  IF &THproblèmerake = 1
  {
    &fs_problèmerake = 32767    
  }
  ELSE
  {
    &fs_problèmerake = 0    
  }
}

Var 0020, name THproblèmerelease, Link IOCP, Offset 32     // Parking Brake Release servo-motor

Var 0021, name THproblèmelight, Link IOCP, Offset 33     // Parking Brake Light

Var 0022, name THrev1, Link IOCP, Offset 27     // Lever 1 Reverse
{
  IF &THrev1 = 1
  {
    &Lever1_to_FS = -4096    
  }
  ELSE
  {
    &Lever1_to_FS = 0    
  }
}

Var 0023, name THrev2, Link IOCP, Offset 23     // Lever 2 Reverse
{
  IF &THrev2 = 1
  {
    &Lever2_to_FS = -4096    
  }
  ELSE
  {
    &Lever2_to_FS = 0    
  }
}

Var 0024, name THTrimwheel, Link IOCP, Offset 34     // Trim Wheel motor

Var 0025, name THGTrim1, Link IOCP, Offset 35     // Trim gauge Left

Var 0026, name THGTrim2, Link IOCP, Offset 36     // Trim gauge right

Var 0027, name THSpoilers, Link IOCP, Offset 6     // Spoilers lever
{
  IF &THSArmed = 1
  {
    &fs_spoilers = 4800    
  }
  ELSE
  {
    &fs_spoilers = &THSpoilers    
  }
}

Var 0028, name THSArmed, Link IOCP, Offset 7     // Spoilers lever in Armed zone
{
  IF &THSArmed = 1
  {
    &fs_spoilers = 4800    
    &fs_spoilersa = 1    
  }
  ELSE
  {
    &fs_spoilersa = 0    
  }
}

Var 0029, name THAutoS, Link IOCP, Offset 37     // Autopos Spoilers 1=Up zone 2=Down zone

Var 0030, name THValve1, Link IOCP, Offset 29     // Valve1 lever
{
  IF &THValve1 = 1
  {
    &fs_valve1 = 0    
  }
  ELSE
  {
    &fs_valve1 = 16384    
  }
}

Var 0031, name THValve2, Link IOCP, Offset 28     // Valve2 lever
{
  IF &THValve2 = 1
  {
    &fs_valve2 = 0    
  }
  ELSE
  {
    &fs_valve2 = 16384    
  }
}

Var 0032, name THHcutout, Link IOCP, Offset 22     // Horn cutout buttom			

Var 0033, name THEcutout, Link IOCP, Offset 24     // Elect cutout buttom

Var 0034, name THAcutout, Link IOCP, Offset 25     // Autopilot cutout buttom

Var 0035, name THForce1, Link IOCP, Offset 17     // Force Spoilers

Var 0036, name THForce2, Link IOCP, Offset 18     // Force Lever 2

Var 0037, name THForce3, Link IOCP, Offset 19     // Force Lever 1

Var 0038, name THForce4, Link IOCP, Offset 20     // Force TrimWheel

Var 0040, name Lever2_to_FS, Link FSUIPC_OUT, Offset $0924, Length 2     // Send value of Lever2 to FS 

Var 0041, name Lever1_to_FS, Link FSUIPC_OUT, Offset $088C, Length 2     // Send value of Lever1 to FS 

Var 0042, name AutoThrottle, Link FSUIPC_INOUT, Offset $07DC, Length 4     // is A/T active? 
{
  IF &AutoThrottle = 0     // A/T is OFF 
  {
    &THautoth = 0    
  }
}

Var 0043, name ENGINENUMBERS, Link FSUIPC_INOUT, Offset $0AEC, Length 2     // Number of engines

Var 0044, name TOGA, Link FSUIPC_INOUT, Offset $080C, Length 4     // is TO/GA switch active?
{
  IF &TOGA = 0
  {
    IF &AutoThrottle = 0
    {
      &THautoth = 0    
    }
  }
}

Var 0045, name Lever1_target, Link FSUIPC_IN, Offset $088C, Length 2     // Where Lever1 should be 
{
  IF &THrev1 = 1
  {
    &AutoThrottle = 0    
  }
  IF &AutoThrottle = 1     // A/T is ON 
  {
    &THautoth = 1    
    &THpos1 = &Lever1_target    
  }
  IF &TOGA = 1     // A/T is ON 
  {
    &THautoth = 1    
    &THpos1 = &Lever1_target    
  }
}

Var 0046, name Lever2_target, Link FSUIPC_IN, Offset $0924, Length 2     // Where Lever2 should be 
{
  IF &THrev2 = 1
  {
    &AutoThrottle = 0    
  }
  IF &AutoThrottle = 1     // A/T is ON
  {
    &THautoth = 1    
    &THpos2 = &Lever2_target    
  }
  IF &TOGA = 1     // A/T is ON 
  {
    &THautoth = 1    
    &THpos2 = &Lever2_target    
  }
}

Var 0047, name fs_flaps, Link FSUIPC_OUT, Offset $0BDC, Length 4     // Flaps

Var 0048, name fs_problèmerakel, Link FSUIPC_IN, Offset $0BCA, Length 2     // Parking brake light
{
  IF &fs_problèmerakel = 16383
  {
    &THproblèmelight = 1    
  }
  ELSE
  {
    &THproblèmelight = 0    
    &THproblèmerelease = 1    
    &THproblèmerelease = DELAY 0 ,50     // Unrelease after 500 ms
  }
}

Var 0049, name fs_problèmerake, Link FSUIPC_OUT, Offset $0BC8, Length 2     // Parking brake

Var 0050, name Trim_target, Link FSUIPC_IN, Offset $0BC0, Length 2, Type 1     // Where Elevator Trim should be
{
  &THGTrim1 = &Trim_target    
  &THGTrim2 = &Trim_target    
  L0 = &Trimwheel - &Trim_target
  L1 = ABS L0
  IF L1 > 50
  {
    &Trimwheel = &Trim_target    
    IF L0 > 0
    {
      &THTrimwheel = 127    
    }
    ELSE
    {
      &THTrimwheel = 254    
    }
  }
  ELSE
  {
    &THTrimwheel = 0    
  }
}

Var 0051, name fs_spoilers, Link FSUIPC_OUT, Offset $0BD0, Length 4     // Spoilers position

Var 0052, name fs_spoilersa, Link FSUIPC_OUT, Offset $0BCC, Length 4     // Spoilers armed ?

Var 0053, name fs_onground, Link FSUIPC_IN, Offset $0366, Length 2     // On ground ?
{
  IF &fs_onground = 1
  {
    IF &THSArmed = 1
    {
      &THAutoS = 1    
    }
  }
}

Var 0054, name fs_valve1, Link FSUIPC_OUT, Offset $0890, Length 2     // Valve 1

Var 0055, name fs_valve2, Link FSUIPC_OUT, Offset $0928, Length 2     // Valve 2

Var 0061, name TimerTrim, Link SUBRUTINE
{
  L0 = &Trimwheel2 - &Trim_target
  IF L0 = 0
  {
    &THTrimwheel = 0    
  }
  &Trimwheel2 = &Trim_target    
}

Var 0062, name Trimwheel

Var 0063, name Trimwheel2
 
C'est un mélange doffset fsuipc et de variables iocp le soucis c'est qu'on ne connais pas les offset iocp il faut le fichier texte qui va bien le mieux et de faire ton propre code sinon tu vas rien comprendre à  ce que tu fais
 
Retour
Haut