X-Plane コクピットの自作に挑戦!
ロータリースイッチを使用して、イグニッションキーを制御。

イグニッション OFF、R、L、BOTH、STARTをコントロール。
今回の実際のレイアウトと配線図です。

ゴチャゴチャしてますが、他の配線が見える右上は無視して下さい。5つのプッシュボタンをTeensyに繋いでいるだけです。
5つのボタン左からOFF、LEFT、RIGHT、BOTH、STARTになっています。
OFFとSTARTは分かりますが、中央の3つは必要? 双発機などで必要になるのかも、後で検証します。
プッシュボタンをしっかり取り付けるのがポイントです。これが動作しない原因になります。
ピンはこれ以外でももちろん動作します。色々試して見てください。
イグニッションキーについてここに詳しく解説されています。2つある点火プラグの右、左ということらしいが、スタートまでキーをいっぱいに廻して、エンジンスタートさせた後、キーは自動的にBOTH(両方)に止まるのでしょうね多分、普通はこれで飛行、点検のためにLeftやRightの位置にキーを回すとその位置の点火プラグだけがマグネットから電気が供給されるとうことかな?なんとなくこれでしょう。詳しくわかる方のご助言をお聞きしたいですね。
イグニッションキーのスケッチ
これは、スケッチを公開しているこのサイトから頂きました。
お陰で、イグニッションの問題も解決。但し、このピンで接続すると動きが前後したのでピンを変えました。Teensy 2.0の場合は、一応以下のピン配置でうなくいくと思います。ピンの位置は他の位置でももちろんうまくいくと思いますが、色々テストするといいと思います。
X-Plane_IgnitionKey.ino
#include "Bounce.h"
// per X-Plane DataRef docs
enum IGN_KEY_POSITION {
IGN_OFF = 0,
IGN_LEFT = 1,
IGN_RIGHT = 2,
IGN_BOTH = 3,
IGN_START = 4
};
// button input pins
const int Pin_IgnOff = 1;
const int Pin_IgnRight = 2;
const int Pin_IgnLeft = 5;
const int Pin_IgnBoth = 9;
const int Pin_IgnStart = 3;
Bounce ignOff = Bounce (Pin_IgnOff, 5);
Bounce ignRight = Bounce (Pin_IgnRight, 5);
Bounce ignLeft = Bounce (Pin_IgnLeft, 5);
Bounce ignBoth = Bounce (Pin_IgnBoth, 5);
Bounce ignStart = Bounce (Pin_IgnStart, 5);
// output dataref/commands
// the ignition key dataref does not engage the starter for some reason
// so we'll also use the normal engage_starter_1 command
FlightSimInteger ignPosition;
FlightSimCommand engineStart1;
void setup() {
pinMode (Pin_IgnOff, INPUT_PULLUP);
pinMode (Pin_IgnRight, INPUT_PULLUP);
pinMode (Pin_IgnLeft, INPUT_PULLUP);
pinMode (Pin_IgnBoth, INPUT_PULLUP);
pinMode (Pin_IgnStart, INPUT_PULLUP);
ignPosition = XPlaneRef("sim/cockpit2/engine/actuators/ignition_on[0]");
engineStart1 = XPlaneRef("sim/starters/engage_starter_1");
pinMode (LED_BUILTIN, OUTPUT);
}
void loop() {
FlightSim.update();
ignOff.update();
ignRight.update();
ignLeft.update();
ignBoth.update();
ignStart.update();
// non-blocking input to update ignition key position
if (ignOff.fallingEdge()) ignPosition = IGN_OFF;
if (ignLeft.fallingEdge()) ignPosition = IGN_LEFT;
if (ignRight.fallingEdge()) ignPosition = IGN_RIGHT;
if (ignBoth.fallingEdge()) ignPosition = IGN_BOTH;
// engage starter using command as well as by moving key
if (ignStart.fallingEdge()) {
ignPosition = IGN_START;
engineStart1.begin();
digitalWrite (LED_BUILTIN, HIGH);
}
if (ignStart.risingEdge()) {
engineStart1.end();
digitalWrite (LED_BUILTIN, LOW);
}
// debug code for hardware test
// if ( ignOff.read() == LOW ||
// ignRight.read() == LOW ||
// ignLeft.read() == LOW ||
// ignBoth.read() == LOW ||
// ignStart.read() == LOW
// ) {
// digitalWrite(LED_BUILTIN, HIGH);
// } else {
// digitalWrite(LED_BUILTIN, LOW);
// }
}
13行目からが繋ぐピンの位置です。
const int Pin_IgnOff = 1;
const int Pin_IgnRight = 2;
const int Pin_IgnLeft = 5;
const int Pin_IgnBoth = 9;
const int Pin_IgnStart = 3;
セスナ172SPなら、エンジンを切った状態から一番右のスタートボタンでエンジンがかかります、その時、スロットルを押上げて、ミクスチャーノブも押し上げておくこと。
作成した一番左のプッシュボタンでエンジンOFFになります。
