X-Plane コクピットの自作に挑戦!
X-Plane ギアのアップダウンコントロール
6つのLEDを使用して、ギアのアップダウンのコントロールとその様子を見ることにします。


スイッチを切り替えるとギアをアップダウン。6つのLEDで、ギアがどういう状態かを確認。
ギアダウンを開始すると、赤LEDが点灯、完了すると緑LEDが点灯(ギアが降りた状態)。
ギアアップを開始すると、再び赤LEDが点灯、完了すると消灯(収納された状態は全て消灯)、車輪の位置によって少し違っているのが、LED消灯のズレで分かると思います。
つまり、ギアが動作している状態の時、赤LEDが点灯しています。

今回の実際のレイアウトと配線図です。


X-Plane10本番.rwsw



粗い微動3モード切り替え図面2.ai @ 300% (CMYK_プレビュー)
スイッチでギアのアップダウンを行ない、ギアがアップした時は赤LEDが点灯、ダウンのときは緑LEDが点灯

スイッチによるギアのアップダウンと、その動作をLEDで見るスケッチ
これは、スケッチを公開しているこのサイトから頂きました。ここには、詳しい説明があります。
ピンの位置を少し変更していますが。これでTeensy 2.0は動作しました。
X-Plane_gearUpDown.ino

 #include <Bounce.h>
 
////////////////////////////////////////
// Hardware input
//
const int gearSwitchPin = 14;
Bounce gearSwitch = Bounce (gearSwitchPin, 5);
 
////////////////////////////////////////
// Hardware output
//
const int greenLeftPin  = 10;
const int greenNosePin  = 11;
const int greenRightPin = 13;
 
const int redLeftPin    = 21;
const int redNosePin    = 18;
const int redRightPin   = 17;
 
////////////////////////////////////////
// X-Plane input and output
//
// Landing gear handle commands
FlightSimCommand gearUp;
FlightSimCommand gearDown;
 
// Landing gear actual position 
FlightSimFloat gearDeployLeft;
FlightSimFloat gearDeployNose;
FlightSimFloat gearDeployRight;
 
// Landing gear handle position 
FlightSimInteger gearHandleDown;
 
// Aircraft essential bus voltage
FlightSimFloat supplyVolts;
 
void setup() {
 
  //////////////////
  // Input
  //
  pinMode (gearSwitchPin, INPUT_PULLUP);
 
  //////////////////
  // Output
  //
  pinMode(greenLeftPin,  OUTPUT);
  pinMode(greenNosePin,  OUTPUT);
  pinMode(greenRightPin, OUTPUT);
 
  pinMode(redLeftPin,    OUTPUT);
  pinMode(redNosePin,    OUTPUT);
  pinMode(redRightPin,   OUTPUT);
 
  //////////////////
  // X-Plane
  //
  gearUp          = XPlaneRef("sim/flight_controls/landing_gear_up");
  gearDown        = XPlaneRef("sim/flight_controls/landing_gear_down");
 
  gearDeployLeft  = XPlaneRef("sim/flightmodel2/gear/deploy_ratio[1]");
  gearDeployNose  = XPlaneRef("sim/flightmodel2/gear/deploy_ratio[0]");
  gearDeployRight = XPlaneRef("sim/flightmodel2/gear/deploy_ratio[2]");
 
  gearHandleDown  = XPlaneRef("sim/cockpit2/controls/gear_handle_down");  
 
  supplyVolts     = XPlaneRef("sim/cockpit2/electrical/bus_volts[0]");
}
 
void loop() {
 
  FlightSim.update();
  gearSwitch.update();
 
  //////////////////
  // Process input
  //
 
  // blocking input on gear handle position
  if(gearSwitch.read() == LOW) { // if the switch is closed
    if (gearHandleDown == 0) {   // if gear handle is up
      gearDown.once();           // move it down
    }
  } else {
    if (gearHandleDown == 1) {   // if gear handle is down
      gearUp.once();             // move it up
    }
  } // gearSwitch
 
  //////////////////
  // Process output
  //
 
  // we need 10V and the sim to be running to light the LEDs
  bool canLight = (supplyVolts > 10.0) && FlightSim.isEnabled();
 
  // light red LEDs if gear handle and position disagree and we have power
  digitalWrite(redLeftPin,  (gearHandleDown != gearDeployLeft)  && canLight);
  digitalWrite(redNosePin,  (gearHandleDown != gearDeployNose)  && canLight);
  digitalWrite(redRightPin, (gearHandleDown != gearDeployRight) && canLight);
 
  // light green LEDs if gear down and we have power
  digitalWrite(greenLeftPin,  (gearDeployLeft  == 1.0) && canLight);
  digitalWrite(greenNosePin,  (gearDeployNose  == 1.0) && canLight);
  digitalWrite(greenRightPin, (gearDeployRight == 1.0) && canLight);
 
}
512行目が繋ぐピンの位置です。

CoarseEnc_A = 10,
CoarseEnc_B = 9,
FineEnc_A = 5,
FineEnc_B = 6,
ModeSwitchPin = 20,
HdgModeLED = 15,
Nav1OBSLED = 13,
ElevTrimLED = 14

comments powered by Disqus
Contents