Re: projet Quadcity challenger/générique
Posté: Dim 18 Mai 2014 16:37
le plugin permet au Teensy d'envoyer et de recevoir la valeur des différent DataRef programmer dans le Teensy. Par exemple ici je veux le RPM moteur.
ensuite je setup les variable (le serial est pour le contrôleur de servo, me permettant de contrôler 8 servo avec une seul Output et je peut en ajouter plusieurs en série)
j'attache ensuite la variable déclarer plus haut a un DataRef
La fonction loop est exécuter en permanence. elle ne fait que demander a X-Plane si la/les variable a/on changé
si le RPM a changer X-plane envoie la nouvelle valeur et le Teensy exécute la fonction correspondante. celle-ci est particulièrement longue puisque je doit m'assuré que l'indicateur est alimenter par la batterie, ensuite je "map" la valeur pour la faire correspondre a ce que le contrôleur veux (0-255). ensuite je sépare cette donner en deux pour pouvoir l’envoyer en deux Byte de 7 bit, encore une fois a cause de contrôleur.
j’espère que je suis compréhensible et que je répond a ta question.
peut-tu me donner un lien pour le PVC? c'Est la première fois que j'en entend parler.
edit: j'oubliait, le Teensy communique par USB
- Code: Tout sélectionner
// X-Plane objects
FlightSimInteger Engine_RPM1;
ensuite je setup les variable (le serial est pour le contrôleur de servo, me permettant de contrôler 8 servo avec une seul Output et je peut en ajouter plusieurs en série)
- Code: Tout sélectionner
// setup runs once, when Teensy boots.
//
void setup()
{
// initialize all hardware
Serial1.begin(38400);
for(int i=0;i<8;i++)
{
Serial1.print(128,BYTE); //start
Serial1.print(1,BYTE); //device ID
Serial1.print(0,BYTE); //command; set parameters
Serial1.print(i,BYTE); //servo num: servo i
Serial1.print(79,BYTE); // servoi on, fwd, range full
/*
delay(10);
Serial1.print(128,BYTE); //start
Serial1.print(1,BYTE); //device ID
Serial1.print(1,BYTE); //command; set speed
Serial1.print(i,BYTE); //servo num: servo i
Serial1.print(100,BYTE); // servoi speed
*/
}
j'attache ensuite la variable déclarer plus haut a un DataRef
- Code: Tout sélectionner
// configure the X-Plane variables
Engine_RPM1 = XPlaneRef("sim/cockpit2/engine/indicators/engine_speed_rpm[0]");
Engine_RPM1.onChange(update_RPM1);
}
La fonction loop est exécuter en permanence. elle ne fait que demander a X-Plane si la/les variable a/on changé
- Code: Tout sélectionner
// loop runs repetitively, as long as Teensy is powered up
//
void loop()
{
// normally the first step in loop() should update from X-Plane
FlightSim.update();
}
si le RPM a changer X-plane envoie la nouvelle valeur et le Teensy exécute la fonction correspondante. celle-ci est particulièrement longue puisque je doit m'assuré que l'indicateur est alimenter par la batterie, ensuite je "map" la valeur pour la faire correspondre a ce que le contrôleur veux (0-255). ensuite je sépare cette donner en deux pour pouvoir l’envoyer en deux Byte de 7 bit, encore une fois a cause de contrôleur.
- Code: Tout sélectionner
void update_RPM1(long val)
{
if (Batterie_power == 0)
{
val = 0;
}
int RPM = map(val,0,6000,225,25);
byte temp;
byte pos_hi,pos_low;
temp = RPM & 0x80; //get bit 8 of position
pos_hi = temp >> 7; //shift bit 8 by 7
pos_low = RPM & 0x7f; //get lower 7 bits of position
Serial1.print(128,BYTE); //start
Serial1.print(1,BYTE); //device ID
Serial1.print(3,BYTE); //command: set position 8 bits
Serial1.print(0,BYTE); //servo num: servo 0
Serial1.print(pos_hi,BYTE); //bits 8 thru 13
Serial1.print(pos_low,BYTE); //bottom 7 bits
}
j’espère que je suis compréhensible et que je répond a ta question.
peut-tu me donner un lien pour le PVC? c'Est la première fois que j'en entend parler.
edit: j'oubliait, le Teensy communique par USB