ロータリースイッチ

ほとんど使用しない唯一のロータリースイッチですが、一応作成してみましょう。理屈はトグルスイッチと同じと思ってもいいと思うのですが、ロータリー用のまた別のスケッチが用意されています。
またB747-400ではHDGと一緒に組み込まれた2段構えの状態ですが、こんなスイッチは手に入りませんので単独で作成することになります。

これもTeensyの内部プルアップ抵抗を使用するので、抵抗類は一切いりません。ダイレクトに繋ぐことが出来るので簡単なレイアウトになります。
B747-400 ロータリースイッチ(Teensyのピンはどれでも可)
//ロータリースイッチの最初のピンと最後のピンを指定
//10ピン〜15ピン、6つのスイッチを使用した場合
const int BLSfirstRotaryPin = 10;
const int BLSlastRotaryPin = 15;
FlightSimInteger BankLmitSelector;
void setup() {
// すべてのハードウェアを初期化
pinMode(10, INPUT_PULLUP); // 接続モード
pinMode(11, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);
pinMode(14, INPUT_PULLUP);
pinMode(15, INPUT_PULLUP);
BankLmitSelector = XPlaneRef("sim/cockpit/autopilot/heading_roll_mode");
}
int getBLSRotaryValue() {
for(int i=BLSfirstRotaryPin; i<= BLSlastRotaryPin; i++) {
int val = digitalRead( i ); // ロータリースイッチ入力を観察
if( val == LOW ) { // それを選択
return (i - BLSfirstRotaryPin + 1); // 5 - 1の範囲の値を返す
}
}
return 0; // error case
}
void loop() {
FlightSim.update();
int BLSrotaryPos = getBLSRotaryValue();
if( BLSrotaryPos == 1 ) { //もしBLSrotaryPosが 1 なら
BankLmitSelector = 0; //BankLmitSelectorを 0 にする
}
if( BLSrotaryPos == 2 ) {
BankLmitSelector = 1;
}
if( BLSrotaryPos == 3 ) {
BankLmitSelector = 2;
}
if( BLSrotaryPos == 4 ) {
BankLmitSelector = 3;
}
if( BLSrotaryPos == 5 ) {
BankLmitSelector = 4;
}
if( BLSrotaryPos == 6 ) {
BankLmitSelector = 5;
}
}