このプロジェクト、X-Plane B777 WoldlinerのオートパイロットーコックピットパネルのArduinoプログラムです。
このまま、コピーしてArduinoに貼り込んだら使えます。
ただし、TeensyControlsプラグインとArduinoにTeensyduinoをインストールが完了していることが必要です。
このプラグラムはまだ完全ではありません。後、問題としてLEDの点灯/消灯が非常に複雑でまだ完璧に動作していません。
是非皆さんも勉強のつもりでバグの修正をお願いします。それでよかったら、このプログラムを使っていただきたいとおもいます。
Boing 777 Worldliner Auto Pilot.ino
2018年11月14日更新:いいところまでいってますが、完璧ではありません。LEDの点灯に多少問題あり。
//B777Wordliner(X-Plane 11)専用。 HDGエンコーダの回転で10と違っているところがある
//2018年9月10日作成スタート
//teensy++2.0 用
#include <Encoder.h>
#include <Bounce.h>
#include <LedControl.h>
////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////// 74HC595(LED表示)シフトレジスタ 共通スクリプト ///////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
int SER_dataPin = 43; //pin 14(DS-data) on the 75HC595
int RCLK_latchPin = 44; //pin 12(ST_CP-latch) on the 75HC595
int SRCLK_clockPin = 45; //pin 11(SH_CP-clock) on the 75HC595
#define number_of_74hc595s 3 //シフトレジスタ74HC595の数
#define numOfRegisterPins number_of_74hc595s * 8 //ここは変更しないこと
boolean registers[numOfRegisterPins]; //上のレジスタの数を反映させる共通スクリプト
void clearRegisters(){
for(int i = numOfRegisterPins - 1; i >= 0; i--){
registers[i] = LOW; //最初にLEDを全消灯するため(LOWは全点灯)、
//確認の為にスタート時にLEDをON,完全にX-Planeが起動したらOFFになる。
}
}
void writeRegisters(){
digitalWrite(RCLK_latchPin, LOW);
for(int i = numOfRegisterPins - 1; i >= 0; i--){
digitalWrite(SRCLK_clockPin, LOW);
int val = registers[i];
digitalWrite(SER_dataPin, val);
digitalWrite(SRCLK_clockPin, HIGH);
}
digitalWrite(RCLK_latchPin, HIGH);
}
// 個々のピンをHIGかLOWに設定する
void setRegisterPin(int index, int value){ //indexでピン位置、valueでLOWかHIGH
registers[index] = value;
}
// 共通ここまで ///////////////////////////////
elapsedMillis inactivityTimeout;// 無活動タイムアウト
/////////////////////////////////////////////////////////////////////////
/////////// スイッチ Teensy 直結ピン ///////////
/////////////////////////////////////////////////////////////////////////
//####### 左パネル Part-A ##########
//===============================================================================================
/////////// Part-A F/D トグルスイッチ //////////////////
//===============================================================================================
const int FDSwPin = 0;
Bounce FDir_toggle_switch = Bounce(FDSwPin, 5); //teensy 0ピンを使用
FlightSimInteger FlightDirector;
//===============================================================================================
/////////// Part-A A/T ARM トグルスイッチ //////////////////
//===============================================================================================
const int ATarmSwPin = 1;
Bounce ATarmSwitch = Bounce(ATarmSwPin, 5);
FlightSimInteger AutoThrottleARM;
//===============================================================================================
/////////// Part-A A/P プッシュスイッチ //////////////////
//===============================================================================================
const int APSwPin = 2;
Bounce APSwitch = Bounce(APSwPin, 5);
FlightSimInteger AutoPilotSW;
//===============================================================================================
/////////// Part-A CLB CON プッシュスイッチ /////////////////
//===============================================================================================
const int CLBCON_SwPin = 3;
int CLBCON_SwPin_val = 0; //入力ピンの状態がこの変数(val)に記憶される
int CLBCON_SwPin_old_val = 0; //valの前の値を保存しておく変数
int CLBCON_SwPin_state = 0; //LEDの状態(0ならオフ、1ならオン)
FlightSimInteger CLBCON_SW;
//===============================================================================================
/////////// Part-A A/T プッシュスイッチ //////////////////
//===============================================================================================
const int AT_SwPin = 4;
int AT_SwPin_val = 0;
int AT_SwPin_old_val = 0;
int AT_SwPin_state = 0;
FlightSimInteger AT_SW;
//===============================================================================================
/////////// Part-A LNAV プッシュスイッチ //////////////////
//===============================================================================================
const int LNAV_SwPin = 5;
int LNAV_SwPin_val = 0;
int LNAV_SwPin_old_val = 0;
int LNAV_SwPin_state = 0;
FlightSimInteger LNAV_SW;
//===============================================================================================
/////////// Part-A VNAV プッシュスイッチ //////////////////
//===============================================================================================
const int VNAV_SwPin = 6;
int VNAV_SwPin_val = 0;
int VNAV_SwPin_old_val = 0;
int VNAV_SwPin_state = 0;
FlightSimInteger VNAV_SW;
//===============================================================================================
/////////// Part-A FLCH プッシュスイッチ //////////////////
//===============================================================================================
const int FLCH_SwPin = 7;
int FLCH_SwPin_val = 0; //入力ピンの状態がこの変数(val)に記憶される
int FLCH_SwPin_old_val = 0; //valの前の値を保存しておく変数
int FLCH_SwPin_state = 0; //LEDの状態(0ならオフ、1ならオン)
FlightSimInteger FLCH_SW;
//===============================================================================================
/////////// Part-A IAS MACH チェンジ プッシュスイッチ //////////////////
//===============================================================================================
const int IAS_MACHchenge_SwPin = 8;
int IAS_MACHchenge_SwPin_val = 0;
int IAS_MACHchenge_SwPin_old_val = 0;
int IAS_MACHchenge_SwPin_state = 0;
FlightSimInteger IAS_MACH_airspeed;
FlightSimInteger IAS_MACHchenge_SW;
//===============================================================================================
/////////// Part-A AirSeed エンコーダ //////////////////
//===============================================================================================
const int AirSpEncR_pin = 9; //エンコーダ teensy9ピンを使用
const int AirSpEncL_Pin = 10; //エンコーダ teensy10ピンを使用
Encoder AirSpEnc(AirSpEncR_pin, AirSpEncL_Pin);
short AirSpEncPrev = 0; //エンコーダの逆回転
FlightSimInteger AirSpeed;
FlightSimInteger AirSpeedknob; //AirSpeedのノブを回転させるためだけの専用
//===============================================================================================
/////////// Part-A AirSeed エンコーダ プッシュスイッチ //////////////////
//===============================================================================================
const int AirSpeed_EncPush_SwPin = 11;
int AirSpeed_EncPush_SwPin_val = 0;
int AirSpeed_EncPush_SwPin_old_val = 0;
int AirSpeed_EncPush_SwPin_state = 0;
FlightSimInteger AirSpeed_EncPush_SW;
//####### 中央パネル Part-B ##########
//===============================================================================================
/////////// Part-B TOGA タクトスイッチ //////////////////
//===============================================================================================
const int TOGA_SwPin = 12;
int Toga_SwPin_val = 0; //入力ピンの状態がこの変数(val)に記憶される
int Toga_SwPin_old_val = 0; //valの前の値を保存しておく変数
int Toga_SwPin_state = 0; //LEDの状態(0ならオフ、1ならオン)
FlightSimInteger TOGA_SW;
//===============================================================================================
/////////// Part-B DISC タクトスイッチ //////////////////
//===============================================================================================
const int DISK_SwPin = 13;
int DISK_SwPin_val = 0;
int DISK_SwPin_old_val = 0;
int DISK_SwPin_state = 0;
FlightSimInteger DISK_SW;
//===============================================================================================
/////////// Part-B HDG HOLD タクトスイッチ //////////////////
//===============================================================================================
const int HDG_HOLD_SwPin = 14;
int HDG_HOLD_SwPin_val = 0;
int HDG_HOLD_SwPin_old_val = 0;
int HDG_HOLD_SwPin_state = 0;
FlightSimInteger HDG_HOLD_SW;
//===============================================================================================
/////////// Part-B 不明 タクトスイッチ //////////////////
//===============================================================================================
//このスイッチ何に使うのかまったく不明。でも一応動作している。
const int Unknown_SwPin = 15;
int Unknown_SwPin_val = 0;
int Unknown_SwPin_old_val = 0;
int Unknown_SwPin_state = 0;
FlightSimInteger Unknown_SW;
//===============================================================================================
/////////// Part-B HDG TRK 切り替えスイッチ //////////////////
//===============================================================================================
const int HDG_TRKchange_SwPin = 16;
int HDG_TRKchange_SwPin_val = 0; //入力ピンの状態がこの変数(val)に記憶される
int HDG_TRKchange_SwPin_old_val = 0; //valの前の値を保存しておく変数
int HDG_TRKchange_SwPin_state = 0; //LEDの状態(0ならオフ、1ならオン)
FlightSimInteger HDG_TRKchange_SW;
//===============================================================================================
/////////// Part-B HDG BANK LIMIT 6モード切り替え スイッチ //////////////////
//===============================================================================================
int BankLimit_SwPin = 17;
Bounce BankLimit_modeSwitchPin = Bounce (BankLimit_SwPin, 5);
FlightSimInteger BankLimit_Cange;
int prev;
// モードの設定
enum Modes {
BankLimit_0_Mode,
BankLimit_1_Mode,
BankLimit_2_Mode,
BankLimit_3_Mode,
BankLimit_4_Mode,
BankLimit_5_Mode,
Mode_Count //これで自動的に6つのモードを持つことになる
};
int mode = 0;
//===============================================================================================
/////////// Part-B HDG ENC エンコーダ //////////////////
//===============================================================================================
const int HdgEncR_rotationPin = 18; //エンコーダ teensy18ピンを使用
const int HdgEncEncL_rotationPin = 19; //エンコーダ teensy19ピンを使用
Encoder HdgEnc(HdgEncR_rotationPin,HdgEncEncL_rotationPin); //X-Plane10は回転が逆になっているので左右を入れ替える
short HdgEncPrev = 0;
FlightSimInteger headingBug;
FlightSimInteger headingBugKnob;
//===============================================================================================
/////////// Part-B HDG エンコーダ プッシュスイッチ //////////////////
//===============================================================================================
const int HDG_EncPush_SwPin = 20;
int HDG_EncPush_SwPin_val = 0; //入力ピンの状態がこの変数(val)に記憶される
int HDG_EncPush_SwPin_old_val = 0; //valの前の値を保存しておく変数
int HDG_EncPush_SwPin_state = 0; //LEDの状態(0ならオフ、1ならオン)
FlightSimInteger HDG_EncPush_SW;
//####### 右パネル Part-C ##########
//===============================================================================================
/////////// Part-C V/S FPA タクトスイッチ //////////////////
//===============================================================================================
const int VS_FPA_SwPin = 21;
int VS_FPA_SwPin_val = 0;
int VS_FPA_SwPin_old_val = 0;
int VS_FPA_SwPin_state = 0;
FlightSimInteger VS_FPA_SW;
//===============================================================================================
/////////// Part-C ALT HOLD タクトスイッチ //////////////////
//===============================================================================================
const int ALT_HOLD_SwPin = 22;
int ALT_HOLD_SwPin_val = 0;
int ALT_HOLD_SwPin_old_val = 0;
int ALT_HOLD_SwPin_state = 0;
FlightSimInteger ALT_HOLD_SW;
//===============================================================================================
/////////// Part-C APP タクトスイッチ //////////////////
//===============================================================================================
const int APP_SwPin = 23;
int APP_SwPin_val = 0;
int APP_SwPin_old_val = 0;
int APP_SwPin_state = 0;
FlightSimInteger APP_SW;
//===============================================================================================
/////////// Part-C LOC タクトスイッチ //////////////////
//===============================================================================================
const int LOC_SwPin = 24;
int LOC_SwPin_val = 0;
int LOC_SwPin_old_val = 0;
int LOC_SwPin_state = 0;
FlightSimInteger LOC_SW;
//===============================================================================================
/////////// Part-C V/S FPA 切り替えスイッチ //////////////////
//===============================================================================================
const int VS_FRA_change_SwPin = 25;
int VS_FRA_change_SwPin_val = 0; //入力ピンの状態がこの変数(val)に記憶される
int VS_FRA_change_SwPin_old_val = 0; //valの前の値を保存しておく変数
int VS_FRA_change_SwPin_state = 0; //LEDの状態(0ならオフ、1ならオン)
FlightSimInteger VS_FRA_change_SW;
//===============================================================================================
/////////// Part-C AUTO 1000 セレクトスイッチ //////////////////)
//===============================================================================================
const int AUTO_1000_changeSwPin = 26;
int AUTO_1000_changeSwPin_val = 0;
int AUTO_1000_changeSwPin_old_val = 0;
int AUTO_1000_changeSwPin_state = 0;
FlightSimInteger AUTO_1000_changeSW;
//===============================================================================================
/////////// Part-C Teensyの電圧がONになっているかを確認 //////////////////
//===============================================================================================
const int Teensy_Pawer_ON_LED_Pin = 27;
//===============================================================================================
/////////// Part-C V/S ENC エンコーダ //////////////////
//===============================================================================================
const int VSpEncR_rotationPin = 28; //エンコーダ teensy28ピンを使用
const int VSpEncL_rotationPin = 29; //エンコーダ teensy29ピンを使用
Encoder VSpEnc = Encoder(VSpEncR_rotationPin, VSpEncL_rotationPin);
short VSpEncPrev = 0xaa; //0xaaで下2桁の数字を0にする。エンコーダの逆回転
FlightSimInteger VerticalSpeed; //バーチカルスピード数値を取得するために使用
FlightSimInteger VSpeedKnob; //エンコーダのノブを回すためだけに使用
//===============================================================================================
/////////// Part-C ALT ENC エンコーダ //////////////////
//===============================================================================================
const int AltEncR_rotationPin = 30; //エンコーダ teensy28ピンを使用
const int AltEncL_rotationPin = 31; //エンコーダ teensy28ピンを使用
Encoder AltEnc = Encoder(AltEncR_rotationPin, AltEncL_rotationPin);
short AltEncPrev = 0xaa; //0xaaで下2桁の数字を0にする。エンコーダの逆回転
FlightSimInteger Altitude; //高度数値を取得するために使用
FlightSimInteger AltKnob; //エンコーダのノブを回すためだけに使用
//===============================================================================================
/////////// Part-C ALTTUDE エンコーダ プッシュスイッチ //////////////////
//===============================================================================================
const int ALT_EncPush_SwPin = 32;
int ALT_EncPush_SwPin_val = 0; //入力ピンの状態がこの変数(val)に記憶される
int ALT_EncPush_SwPin_old_val = 0; //valの前の値を保存しておく変数
int ALT_EncPush_SwPin_state = 0; //LEDの状態(0ならオフ、1ならオン)
FlightSimInteger ALT_EncPush_SW;
////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////// LED表示(74HC595)シフトレジスタ経由 ///////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
//複雑な動きをするLEDの点灯/消灯のためにこの宣言を特別に別枠で作成している。
FlightSimInteger Ap_Mode;
FlightSimInteger At_mode;
FlightSimInteger Fd_Visible;
FlightSimInteger Pitch_Mode_Armed;
FlightSimInteger Pitch_Mode_Engaged;
FlightSimInteger Roll_Mode_Armed;
FlightSimInteger Roll_Mode_Engaged;
FlightSimInteger Warn_Flags;
//####### 左パネル Part-A ##########
//==============================================================================================
/////////// Part-A LED表示(74HC595)シフトレジスタ A/P ランプ//////////////////
//==============================================================================================
const int AP_74HC595_Pin = 0;
FlightSimInteger AutoPilotSwLED; //1番パネLED
//==============================================================================================
/////////// Part-A LED表示(74HC595)シフトレジスタ A/T ランプ//////////////////
//==============================================================================================
const int AT_74HC595_Pin = 1;
FlightSimInteger AutothrottleEngageSwLED; //1番パネLED
//==============================================================================================
/////////// Part-A LED表示(74HC595)シフトレジスタ LNAV ランプ //////////////////
//==============================================================================================
const int LNAV_74HC595_Pin = 2;
FlightSimInteger LateralNavSwLED;
//==============================================================================================
/////////// Part-A LED表示(74HC595)シフトレジスタ VNAV ランプ //////////////////
//==============================================================================================
const int VNAV_74HC595_Pin = 3;
FlightSimInteger VerticalNavSwLED;
//==============================================================================================
/////////// Part-A LED表示(74HC595)シフトレジスタ FLCH ランプ //////////////////
//==============================================================================================
const int FLCH_74HC595_Pin = 4;
FlightSimInteger FlightLevelChangeSwLED;
//####### 中央パネル Part-B ##########
//==============================================================================================
/////////// Part-B LED表示(74HC595)シフトレジスタ BANK LIMIT 6モード切り替え ランプ //////////////////
//==============================================================================================
const int bankAUTO_74HC595_Pin = 5;
const int bank5_74HC595_Pin = 6;
const int bank10_74HC595_Pin = 7;
const int bank15_74HC595_Pin = 8;
const int bank20_74HC595_Pin = 9;
const int bank25_74HC595_Pin = 10;
FlightSimInteger BankLimit_chengeLED;
//===============================================================================================
/////////// Part-B LED表示(74HC595)シフトレジスタ TOGA ランプ //////////////////
//===============================================================================================
const int Toga_74HC595_Pin = 11;
FlightSimInteger TogaSwLED;
///これは実際は点灯しないのでいらないがLEDを付けてしまったので、瞬間点灯を行うようにする。
//===============================================================================================
/////////// Part-B LED表示(74HC595)シフトレジスタ DISC ランプ //////////////////
//===============================================================================================
const int Disk_74HC595_Pin = 12;
FlightSimInteger DiskSwLED;
//===============================================================================================
/////////// Part-B LED表示(74HC595)シフトレジスタ HDG HOLD ランプ //////////////////
//===============================================================================================
const int HDG_HOLD_74HC595_Pin = 13;
FlightSimInteger HeadingTrackHoldSwLED;
//####### 右パネル Part-C ##########
//===============================================================================================
/////////// Part-C LED表示(74HC595)シフトレジスタ V/S FPA らんぷ //////////////////
//===============================================================================================
const int VS_FPA_74HC595_Pin = 14;
FlightSimInteger VsFpaReferenceSwLED;
//==============================================================================================
/////////// Part-C LED表示(74HC595)シフトレジスタ ALT HOLD ランプ //////////////////
//==============================================================================================
const int ALT_HOLD_74HC595_Pin = 15;
FlightSimInteger AltitudeHoldSwLED;
//==============================================================================================
/////////// Part-C LED表示(74HC595)シフトレジスタ LOC ランプ //////////////////
//==============================================================================================
const int LOC_74HC595_Pin = 16;
FlightSimInteger LocalizerSwLED;
//==============================================================================================
/////////// Part-C LED表示(74HC595)シフトレジスタ APP ランプ //////////////////
//==============================================================================================
const int APP_74HC595_Pin = 17;
FlightSimInteger ApproachSwLED;
//==============================================================================================
/////////// Part-C LED表示(74HC595)シフトレジスタ AUTO/1000チェンジ ランプ //////////////////
//==============================================================================================
const int upAUTO_74HC595_Pin = 18;
const int up1000_74HC595_Pin = 19;
FlightSimInteger AUTO_1000_chengeLED;
void setup() {
////////////////////////////////////////////////////////////////////////////////////////////////////////
// setup内 シフトレジスタ 共通スクリプト //
////////////////////////////////////////////////////////////////////////////////////////////////////////
pinMode(SER_dataPin, OUTPUT);
pinMode(RCLK_latchPin, OUTPUT);
pinMode(SRCLK_clockPin, OUTPUT);
clearRegisters(); //すべてのレジスタピンをリセット
writeRegisters();
// 共通スクリプト ここまで ////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////// setup内 スイッチ Teensy 直結ピン //////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
//####### 左パネル Part-A ##########
//===============================================================================================
/////////// setup内 Part-A F/D トグルスイッチ //////////////////
//===============================================================================================
pinMode(FDSwPin, INPUT_PULLUP);
FlightDirector = XPlaneRef("anim/34/switch");
//===============================================================================================
/////////// setup内 Part-A A/T ARM トグルスイッチ //////////////////
//===============================================================================================
pinMode(ATarmSwPin, INPUT_PULLUP);
AutoThrottleARM = XPlaneRef("anim/33/switch");
//===============================================================================================
/////////// setup内 Part-A A/P タクトスイッチ //////////////////
//===============================================================================================
pinMode(APSwPin, INPUT_PULLUP);
AutoPilotSW = XPlaneRef("anim/13/button");
//===============================================================================================
/////////// setup内 Part-A CLB CON タクトスイッチ //////////////////
//===============================================================================================
pinMode(CLBCON_SwPin, INPUT_PULLUP); //BUTTONは入力に設定
CLBCON_SW = XPlaneRef("anim/14/button");
//===============================================================================================
/////////// setup内 Part-A A/T タクトスイッチ //////////////////
//===============================================================================================
pinMode(AT_SwPin, INPUT_PULLUP); //BUTTONは入力に設定
AT_SW = XPlaneRef("anim/15/button");
//===============================================================================================
/////////// setup内 Part-A IAS MACH 切り替えスイッチ //////////////////
//===============================================================================================
pinMode(IAS_MACHchenge_SwPin, INPUT_PULLUP);
IAS_MACHchenge_SW = XPlaneRef("anim/19/button");
//初期設定
IAS_MACHchenge_SW = 1;
//===============================================================================================
/////////// setup内 Part-A エアースピード エンコーダ //////////////////
//===============================================================================================
pinMode(AirSpEncR_pin, INPUT_PULLUP); //エンコーダ
pinMode(AirSpEncL_Pin, INPUT_PULLUP); //エンコーダ
AirSpeed = XPlaneRef("T7Avionics/ap/spd_act"); //encoder
AirSpeedknob = XPlaneRef("anim/1/spacial"); //ノブを回転させるだけのために
//===============================================================================================
/////////// setup内 Part-A エアースピード エンコーダ プッシュスイッチ //////////////////
//===============================================================================================
pinMode(AirSpeed_EncPush_SwPin, INPUT_PULLUP); //BUTTONは入力に設定
AirSpeed_EncPush_SW = XPlaneRef("anim/186/button");
//===============================================================================================
/////////// setup内 Part-A LNAV タクトスイッチ //////////////////
//============================================================================================
pinMode(LNAV_SwPin, INPUT_PULLUP); //BUTTONは入力に設定
LNAV_SW = XPlaneRef("anim/16/button");
//===============================================================================================
/////////// setup内 Part-A VNAV タクトスイッチ //////////////////
//============================================================================================
pinMode(VNAV_SwPin, INPUT_PULLUP); //BUTTONは入力に設定
VNAV_SW = XPlaneRef("anim/17/button");
//===============================================================================================
/////////// setup内 Part-A FLCH タクトスイッチ //////////////////
//============================================================================================
pinMode(FLCH_SwPin, INPUT_PULLUP); //BUTTONは入力に設定
FLCH_SW = XPlaneRef("anim/18/button");
//####### 中央パネル Part-B ##########
//===============================================================================================
/////////// setup内 Part-B TOGA タクトスイッチ //////////////////コマンドを使用
//===============================================================================================
pinMode(TOGA_SwPin, INPUT_PULLUP);
TOGA_SW = XPlaneRef("anim/149/button"); //下段左
//===============================================================================================
/////////// setup内 Part-B DISC タクトスイッチ //////////////////コマンドを使用
//===============================================================================================
pinMode(DISK_SwPin, INPUT_PULLUP);
DISK_SW = XPlaneRef("anim/176/button"); //違ったらこれ 777/at_disc
//===============================================================================================
/////////// setup内 Part-B 謎のタクトスイッチ //////////////////コマンドを使用
//===============================================================================================
pinMode(Unknown_SwPin, INPUT_PULLUP);
Unknown_SW = XPlaneRef("anim/20/button"); //違ったらこれ 777/at_disc
//===============================================================================================
/////////// setup内 Part-B HDG TRK 切り替えスイッチ //////////////////
//===============================================================================================
pinMode(HDG_TRKchange_SwPin, INPUT_PULLUP);
HDG_TRKchange_SW = XPlaneRef("anim/21/button");
//===============================================================================================
/////////// setup内 Part-B HDG エンコーダ //////////////////
//===============================================================================================
pinMode(HdgEncR_rotationPin, INPUT_PULLUP); //エンコーダ
pinMode(HdgEncEncL_rotationPin, INPUT_PULLUP); //エンコーダ
headingBug = XPlaneRef("T7Avionics/ap/hdg_act"); //エンコーダ
headingBugKnob = XPlaneRef("anim/2/spacial"); //ノブを回転させるだけのために
//===============================================================================================
/////////// setup内 Part-B HDG エンコーダ プッシュスイッチ //////////////////
//=============================================================================================
pinMode(HDG_EncPush_SwPin, INPUT_PULLUP);
HDG_EncPush_SW = XPlaneRef("anim/173/button"); //スタート時は0が本当
HDG_EncPush_SW = 0; //何故かこれが1になってしまうので強制的にスタートは0にする。
//===============================================================================================
/////////// setup内 Part-B HDG BANK LIMIT 切り替えスイッチ //////////////////
//===============================================================================================
pinMode(BankLimit_SwPin, INPUT_PULLUP);
BankLimit_Cange = XPlaneRef("anim/68/switch");
//===============================================================================================
/////////// setup内 Part-B HDG HOLD タクトスイッチ //////////////////
//===============================================================================================
pinMode(HDG_HOLD_SwPin, INPUT_PULLUP);
HDG_HOLD_SW = XPlaneRef("anim/22/button");
//####### 右パネル Part-C ##########
//===============================================================================================
/////////// setup内 Part-C V/S FPA 切り替えスイッチ //////////////////
//===============================================================================================
pinMode(VS_FRA_change_SwPin, INPUT_PULLUP);
VS_FRA_change_SW = XPlaneRef("anim/23/button");
//===============================================================================================
/////////// setup内 Part-C V/S エンコーダ //////////////////
//===============================================================================================
pinMode(VSpEncR_rotationPin, INPUT_PULLUP); //右回転エンコーダ
pinMode(VSpEncL_rotationPin, INPUT_PULLUP); //左回転エンコーダ
VerticalSpeed = XPlaneRef("T7Avionics/ap/vs_act"); //encoder
VSpeedKnob = XPlaneRef("anim/3/spacial"); //ノブを回転させるだけのために
//===============================================================================================
/////////// setup内 Part-C V/S FPA タクトスイッチ //////////////////
//===============================================================================================
pinMode(VS_FPA_SwPin, INPUT_PULLUP);
VS_FPA_SW = XPlaneRef("anim/24/button");
//===============================================================================================
/////////// setup内 Part-C AUTOと1000の切り替えスイッチ //////////////////
//==============================================================================================
pinMode(AUTO_1000_changeSwPin, INPUT_PULLUP);
AUTO_1000_changeSW = XPlaneRef("anim/69/switch");
//===============================================================================================
/////////// setup内 Part-C ALTTUDE エンコーダ //////////////////
//===============================================================================================
pinMode(AltEncR_rotationPin, INPUT_PULLUP); //右回転エンコーダ
pinMode(AltEncL_rotationPin, INPUT_PULLUP); //左回転エンコーダ
Altitude = XPlaneRef("T7Avionics/ap/alt_act"); //encoder
AltKnob = XPlaneRef("anim/4/spacial"); //ノブを回転させるだけのために
//===============================================================================================
/////////// setup内 Part-C ALTTUDE エンコーダ プッシュ(タクト)スイッチ //////////////////
//==============================================================================================
pinMode(ALT_EncPush_SwPin, INPUT_PULLUP);
ALT_EncPush_SW = XPlaneRef("anim/184/button");
//===============================================================================================
/////////// setup内 Part-C ALT HOLD タクトスイッチ //////////////////
//==============================================================================================
pinMode(ALT_HOLD_SwPin, INPUT_PULLUP); //BUTTONは入力に設定
ALT_HOLD_SW = XPlaneRef("anim/25/button");
//===============================================================================================
/////////// setup内 Part-C LOC タクトスイッチ //////////////////
//==============================================================================================
pinMode(LOC_SwPin, INPUT_PULLUP); //BUTTONは入力に設定
LOC_SW = XPlaneRef("anim/26/button");
//===============================================================================================
/////////// setup内 Part-C APP タクトスイッチ //////////////////
//==============================================================================================
pinMode(APP_SwPin, INPUT_PULLUP); //BUTTONは入力に設定
APP_SW = XPlaneRef("anim/27/button");
/*
//===============================================================================================
/////////// setup内 Part-C Teensyの電圧がONになっているかを確認 //////////////////
//===============================================================================================
//Teensyが動作しているのを確認。スタート時、3回点滅後、パネル本体の初期設定LED(AUTO)2個が点灯する。
pinMode(Teensy_Pawer_ON_LED_Pin, OUTPUT);
for(int i=0; i<3; i=i+1) {
digitalWrite(Teensy_Pawer_ON_LED_Pin, HIGH);
delay(1000);
digitalWrite(Teensy_Pawer_ON_LED_Pin, LOW);
delay(1000);
}
*/
////////////////////////////////////////////////////////////////////////////////////////////////////////
// setup内 Part-A LEDピン 74HC595 シフトレジスタ 経由 /////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
//複雑な動きをするLEDの点灯/消灯のためにこのdatarefを特別に別枠で作成している。
// ①AutoPilotSwLED = T7Avionics/ap/ap_mode
// ②AutothrottleEngageSwLED = T7Avionics/ap/at_mode
// ③Fd_Visible = T7Avionics/ap/fd_visible
// ④ApproachSwLED = T7Avionics/ap/pitch_mode_armed
// ⑤AltitudeHoldSwLED = T7Avionics/ap/pitch_mode_engaged
// ⑥LocalizerSwLED = T7Avionics/ap/roll_mode_armed
// ⑦HeadingTrackHoldSwLED = T7Avionics/ap/roll_mode_engaged
// ⑧Warn_Flags = T7Avionics/ap/warn_flags
Ap_Mode = XPlaneRef("T7Avionics/ap/ap_mode");
At_mode = XPlaneRef("T7Avionics/ap/at_mode");
Fd_Visible = XPlaneRef("T7Avionics/ap/fd_visible");
Pitch_Mode_Armed = XPlaneRef("T7Avionics/ap/pitch_mode_armed");
Pitch_Mode_Engaged = XPlaneRef("T7Avionics/ap/pitch_mode_engaged");
Roll_Mode_Armed = XPlaneRef("T7Avionics/ap/roll_mode_armed");
Roll_Mode_Engaged = XPlaneRef("T7Avionics/ap/roll_mode_engaged");
Warn_Flags = XPlaneRef("T7Avionics/ap/warn_flags");
//####### 左パネル Part-A ##########
//===============================================================================================
/////////// setup内 Part-A 74HC595(LED表示)シフトレジスタ A/P ランプ //////////////////
//===============================================================================================
AutoPilotSwLED = XPlaneRef("T7Avionics/ap/ap_mode");
AutoPilotSwLED.onChange(updateAutoPilotSwLED);
//===============================================================================================
/////////// setup内 Part-A 74HC595(LED表示)シフトレジスタ A/T ランプ //////////////////
//===============================================================================================
AutothrottleEngageSwLED = XPlaneRef("T7Avionics/ap/at_mode");
// AutothrottleEngageSwLED.onChange(updateAutothrottleEngageSwLED);
//===============================================================================================
/////////// setup内 Part-A 74HC595(LED表示)シフトレジスタ LNAV ランプ //////////////////旧T7Avionics/ap/roll_mode_engaged
//===============================================================================================
LateralNavSwLED = XPlaneRef("T7Avionics/ap/roll_mode_engaged");
// LateralNavSwLED.onChange(updateLateralNavSwLED);
//===============================================================================================
/////////// setup内 Part-A 74HC595(LED表示)シフトレジスタ VNAV ランプ //////////////////
//===============================================================================================
VerticalNavSwLED = XPlaneRef("T7Avionics/ap/pitch_mode_engaged");
// VerticalNavSwLED.onChange(updateVerticalNavSwLED);
//===============================================================================================
/////////// setup内 Part-A 74HC595(LED表示)シフトレジスタ FLCH ランプ //////////////////
//===============================================================================================
FlightLevelChangeSwLED = XPlaneRef("T7Avionics/ap/pitch_mode_engaged");
// FlightLevelChangeSwLED.onChange(updateFlightLevelChangeSwLED);
//####### 中央パネル Part-B ##########
//===============================================================================================
/////////// setup内 Part-B 74HC595(LED表示)シフトレジスタ TOGA ランプ //////////////////
//===============================================================================================
//sim/cockpit2/autopilot/TOGA_statusp
TogaSwLED = XPlaneRef("T7Avionics/ap/pitch_mode_engaged");//まだ不明
// TogaSwLED.onChange(updateTogaSwLED);
//===============================================================================================
/////////// setup内 Part-B 74HC595(LED表示)シフトレジスタ DISK ランプ //////////////////
//===============================================================================================
//実際はランプはない、作成してしまったので瞬間だけ点灯させる。
DiskSwLED = XPlaneRef("T7Avionics/ap/pitch_mode_engaged");//まだ不明
// DiskSwLED.onChange(updateDiskSwLED);
//==============================================================================================
/////////// setup内 Part-B 74HC595(LED表示)シフトレジスタ BANK LIMITチェンジ ランプ //////////////////
//==============================================================================================
BankLimit_chengeLED = XPlaneRef("anim/68/switch");
BankLimit_chengeLED.onChange(updateBankLimit_chengeLED);
//LEDの初期設定(X-Planeを起動した時この点灯にする)
setRegisterPin(bankAUTO_74HC595_Pin, HIGH);
setRegisterPin(bank5_74HC595_Pin, LOW);
setRegisterPin(bank10_74HC595_Pin, LOW);
setRegisterPin(bank15_74HC595_Pin, LOW);
setRegisterPin(bank20_74HC595_Pin, LOW);
setRegisterPin(bank25_74HC595_Pin, LOW);
//==============================================================================================
/////////// setup内 Part-B 74HC595(LED表示)シフトレジスタ AUTO/1000チェンジ ランプ //////////////////
//==============================================================================================
AUTO_1000_chengeLED = XPlaneRef("anim/69/switch");
AUTO_1000_chengeLED.onChange(updateAUTO_1000_chengeLED);
//LEDの初期設定(X-Planeを起動した時この点灯にする)
setRegisterPin(upAUTO_74HC595_Pin, HIGH);
setRegisterPin(up1000_74HC595_Pin, LOW);
//===============================================================================================
/////////// setup内 Part-B 74HC595(LED表示)シフトレジスタ HDG HOLD ランプ //////////////////
//===============================================================================================
HeadingTrackHoldSwLED = XPlaneRef("T7Avionics/ap/roll_mode_engaged");
// HeadingTrackHoldSwLED.onChange(updateHeadingTrackHoldSwLED);
//####### 右パネル Part-C ##########
//===============================================================================================
/////////// setup内 Part-C 74HC595(LED表示)シフトレジスタ V/S FPA ランプ //////////////////
//===============================================================================================
VsFpaReferenceSwLED = XPlaneRef("T7Avionics/ap/pitch_mode_engaged");
VsFpaReferenceSwLED.onChange(updateVsFpaReferenceSwLED);
//===============================================================================================
/////////// setup内 Part-C 74HC595(LED表示)シフトレジスタ ALT HOLD ランプ //////////////////
//===============================================================================================
AltitudeHoldSwLED = XPlaneRef("T7Avionics/ap/pitch_mode_engaged");
AltitudeHoldSwLED.onChange(updateAltitudeHoldSwLED);
//===============================================================================================
/////////// setup内 Part-C 74HC595(LED表示)シフトレジスタ LOC ランプ //////////////////
//===============================================================================================
LocalizerSwLED = XPlaneRef("T7Avionics/ap/roll_mode_armed");
// LocalizerSwLED.onChange(updateLocalizerSwLED);
//===============================================================================================
/////////// setup内 Part-C 74HC595(LED表示)シフトレジスタ APP ランプ //////////////////
//===============================================================================================
ApproachSwLED = XPlaneRef("T7Avionics/ap/pitch_mode_armed");
// ApproachSwLED.onChange(updateApproachSwLED);
//===============================================================================================
/////////// setup内 Part-C HDG BANK LIMIT 6モード切り替え スイッチ //////////////////
//===============================================================================================
pinMode(BankLimit_SwPin, INPUT_PULLUP);
BankLimit_Cange = XPlaneRef("anim/68/switch");
}
void loop() {
FlightSim.update();
////////////////////////////////////////////////////////////////////////////////////////////////////////
// loop内 74HC595 シフトレジスタ 共通 //
////////////////////////////////////////////////////////////////////////////////////////////////////////
writeRegisters(); //変更内容を表示するために呼び出さなければなりません
//必要な値が設定された後に一度だけ呼び出します。
//////// loop内 シフトレジスタ 共通 END ///////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////// loop内 スイッチ Teensy 直結ピン //////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
//####### 左パネル Part-A ##########
//==============================================================================================
/////////// loop内 Part-A FlightDirector トグルスイッチ //////////////////
//==============================================================================================
FDir_toggle_switch.update();
if (FDir_toggle_switch.fallingEdge()) {
FlightDirector = 1; //スイッチ押し下げたときdatarefを'1'にする
inactivityTimeout = 0;
}
if (FDir_toggle_switch.risingEdge()) {
FlightDirector = 0; //スイッチ押し下げたときdatarefを'0'にする
}
//==============================================================================================
/////////// loop内 Part-A AutoThrottle ARM トグルスイッチ //////////////////
//==============================================================================================
ATarmSwitch.update();
if (ATarmSwitch.fallingEdge()) {
AutoThrottleARM = 1;
inactivityTimeout = 0;
}
if (ATarmSwitch.risingEdge()) {
AutoThrottleARM = 0;
}
//==============================================================================================
/////////// loop内 Part-A AP タクトスイッチ //////////////////
//==============================================================================================
APSwitch.update();
if (APSwitch.fallingEdge()) {
AutoPilotSW = 2;
inactivityTimeout = 0;
}
if (APSwitch.risingEdge()) {
AutoPilotSW = 0;
}
//==============================================================================================
/////////// loop内 Part-A CLB CON タクトスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。
//以下はタクトスイッチを押したとき、1度目はONを保持し、2度めでOFFを保持するを繰り返す。
CLBCON_SwPin_val = digitalRead(CLBCON_SwPin);
if((CLBCON_SwPin_val == LOW) && (CLBCON_SwPin_old_val == HIGH)) {
CLBCON_SwPin_state = 1 - CLBCON_SwPin_state;
//delay(10); //チャタリングが起きるいときはこれを有効にする(500位が安定しているかも)
}
CLBCON_SwPin_old_val = CLBCON_SwPin_val;
if(CLBCON_SwPin_state ==1){
CLBCON_SW = 1;
} else {
CLBCON_SW = 0;
}
//==============================================================================================
/////////// loop内 Part-A A/T タクトスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。
AT_SwPin_val = digitalRead(AT_SwPin);
if((AT_SwPin_val == LOW) && (AT_SwPin_old_val == HIGH)) {
AT_SwPin_state = 1 - AT_SwPin_state;
//delay(10);
}
AT_SwPin_old_val = AT_SwPin_val;
if(AT_SwPin_state ==1){
AT_SW = 1;
} else {
AT_SW = 0;
}
//==============================================================================================
/////////// loop内 Part-A Ias Mach 切り替えスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。
IAS_MACHchenge_SwPin_val = digitalRead(IAS_MACHchenge_SwPin);
if((IAS_MACHchenge_SwPin_val == LOW) && (IAS_MACHchenge_SwPin_old_val == HIGH)) {
IAS_MACHchenge_SwPin_state = 1 - IAS_MACHchenge_SwPin_state;
}
IAS_MACHchenge_SwPin_old_val = IAS_MACHchenge_SwPin_val;
if(IAS_MACHchenge_SwPin_state ==1){
IAS_MACHchenge_SW = 1;
}
else {
IAS_MACHchenge_SW = 0;
}
//==============================================================================================
/////////// loop内 Part-A AirSpeed エンコーダ //////////////////
//==============================================================================================
// 1クリックで4つ変化するので4で割って1つずつカウントするようにする
short AirSpEncDiff = (AirSpEnc.read() - AirSpEncPrev) / 4;
if (AirSpEncDiff) {
// only update prev when we've reached a detent!
//戻り止めに達した場合にのみPREVを更新!
AirSpEncPrev = 0;
AirSpEnc.write(0);
// datarefを一時的な値にコピー
float airSp = AirSpeed;
float airSpkn = AirSpeedknob;
// 一時的な値に変更を適用
airSp += AirSpEncDiff;
airSpkn += AirSpEncDiff;
// 範囲チェックを行う
while (airSp < 100) airSp += 1; //エアスピードが 100 より小さい場合は 1 をプラスする(つまり100で止まる)
while (airSp >= 400) airSp -= 1; //エアスピードが 400 より大きい場合は 1 をマイナスする(つまり399で止まる)
// datarefへ検証された新しいエアースピードの数値を書く
AirSpeed = airSp;
AirSpeedknob = airSpkn;
}
//==============================================================================================
/////////// loop内 Part-A AirSpeed エンコーダ プッシュスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。
AirSpeed_EncPush_SwPin_val = digitalRead(AirSpeed_EncPush_SwPin);
if((AirSpeed_EncPush_SwPin_val == LOW) && (AirSpeed_EncPush_SwPin_old_val == HIGH)) {
AirSpeed_EncPush_SwPin_state = 1 - AirSpeed_EncPush_SwPin_state;
//delay(10); //この位がチャタリングが起きない(500位が安定している)
}
AirSpeed_EncPush_SwPin_old_val = AirSpeed_EncPush_SwPin_val; //valはもう古くなったので保持しておく
if(AirSpeed_EncPush_SwPin_state ==1){
AirSpeed_EncPush_SW = 1;
} else {
AirSpeed_EncPush_SW = 0;
}
//==============================================================================================
/////////// loop内 Part-A LNAV タクトスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。
LNAV_SwPin_val = digitalRead(LNAV_SwPin);
if((LNAV_SwPin_val == LOW) && (LNAV_SwPin_old_val == HIGH)) {
LNAV_SwPin_state = 1 - LNAV_SwPin_state;
//delay(10); //この位がチャタリングが起きない(500位が安定している)
}
LNAV_SwPin_old_val = LNAV_SwPin_val;
if(LNAV_SwPin_state ==1){
LNAV_SW = 1;
} else {
LNAV_SW = 0;
}
//==============================================================================================
/////////// loop内 Part-A VNAV タクトスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。
VNAV_SwPin_val = digitalRead(VNAV_SwPin);
if((VNAV_SwPin_val == LOW) && (VNAV_SwPin_old_val == HIGH)) {
VNAV_SwPin_state = 1 - VNAV_SwPin_state;
//delay(10); //この位がチャタリングが起きない(500位が安定している)
}
VNAV_SwPin_old_val = VNAV_SwPin_val;
if(VNAV_SwPin_state ==1){
VNAV_SW = 1;
}
else {
VNAV_SW = 0;
}
//==============================================================================================
/////////// loop内 Part-A FLCH タクトスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。
FLCH_SwPin_val = digitalRead(FLCH_SwPin); //ボタンの入力(HIGHかLOW)を読み取りvalに格納
//入力がHIGH(ボタンが押されている)なら状態(state)を変更
if((FLCH_SwPin_val == LOW) && (FLCH_SwPin_old_val == HIGH)) { //LOW、HIGHを逆にすると押上たときに点灯するようになる
FLCH_SwPin_state = 1 - FLCH_SwPin_state; //stateは1からstateを引いた値(つまり、stateが1なら0、0なら1となる)
//delay(10); //この位がチャタリングが起きない(500位が安定している)
}
FLCH_SwPin_old_val = FLCH_SwPin_val; //valはもう古くなったので保持しておく
if(FLCH_SwPin_state ==1){
FLCH_SW = 1;
}
else {
FLCH_SW = 0;
}
//####### 中央パネル Part-B ##########
//==============================================================================================
/////////// loop内 Part-B TOGA タクトスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。
Toga_SwPin_val = digitalRead(TOGA_SwPin); //ボタンの入力(HIGHかLOW)を読み取りvalに格納
//入力がHIGH(ボタンが押されている)なら状態(state)を変更
if((Toga_SwPin_val == LOW) && (Toga_SwPin_old_val == HIGH)) { //LOW、HIGHを逆にすると押上たときに点灯するようになる
Toga_SwPin_state = 1 - Toga_SwPin_state; //stateは1からstateを引いた値(つまり、stateが1なら0、0なら1となる)
//delay(10); //この位がチャタリングが起きない(500位が安定している)
}
Toga_SwPin_old_val = Toga_SwPin_val; //valはもう古くなったので保持しておく
if(Toga_SwPin_state ==1){
TOGA_SW = 1;
}
else {
TOGA_SW = 0;
}
//==============================================================================================
/////////// loop内 Part-B DISC タクトスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。
DISK_SwPin_val = digitalRead(DISK_SwPin); //ボタンの入力(HIGHかLOW)を読み取りvalに格納
//入力がHIGH(ボタンが押されている)なら状態(state)を変更
if((DISK_SwPin_val == LOW) && (DISK_SwPin_old_val == HIGH)) { //LOW、HIGHを逆にすると押上たときに点灯するようになる
DISK_SwPin_state = 1 - DISK_SwPin_state; //stateは1からstateを引いた値(つまり、stateが1なら0、0なら1となる)
//delay(10); //この位がチャタリングが起きない(500位が安定している)
}
DISK_SwPin_old_val = DISK_SwPin_val; //valはもう古くなったので保持しておく
if(DISK_SwPin_state ==1){
DISK_SW = 1;
}
else {
DISK_SW = 0;
}
//==============================================================================================
/////////// loop内 Part-B 謎の タクトスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。
Unknown_SwPin_val = digitalRead(Unknown_SwPin);
if((Unknown_SwPin_val == LOW) && (Unknown_SwPin_old_val == HIGH)) {
Unknown_SwPin_state = 1 - Unknown_SwPin_state;
//delay(10); //この位がチャタリングが起きない(500位が安定している)
}
Unknown_SwPin_old_val = Unknown_SwPin_val; //valはもう古くなったので保持しておく
if(Unknown_SwPin_state ==1){
Unknown_SW = 1;
}
else {
Unknown_SW = 0;
}
//==============================================================================================
/////////// loop内 Part-B HDG TRK 切り替えスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。
HDG_TRKchange_SwPin_val = digitalRead(HDG_TRKchange_SwPin);
if((HDG_TRKchange_SwPin_val == LOW) && (HDG_TRKchange_SwPin_old_val == HIGH)) {
HDG_TRKchange_SwPin_state = 1 - HDG_TRKchange_SwPin_state;
//delay(10); //この位がチャタリングが起きない(500位が安定している)
}
HDG_TRKchange_SwPin_old_val = HDG_TRKchange_SwPin_val; //valはもう古くなったので保持しておく
if(HDG_TRKchange_SwPin_state ==1){
HDG_TRKchange_SW = 1;
}
else {
HDG_TRKchange_SW = 0;
}
//==============================================================================================
/////////// loop内 Part-B HDG エンコーダ //////////////////
//==============================================================================================
short HdgEncDiff = (HdgEnc.read() - HdgEncPrev) / 4;
if (HdgEncDiff) {
// only update prev when we've reached a detent!
HdgEncPrev = 0;
HdgEnc.write(0);
// copy dataref to temporary value
float hdg = headingBug;
// apply changes to temp value
hdg += HdgEncDiff;
// do range checking
while (hdg < 0.0) hdg += 360.0;
while (hdg >= 360.0) hdg -= 360.0;
// 検証されてものを書き込む
headingBug = hdg;
headingBugKnob = hdg;
}
//==============================================================================================
/////////// loop内 Part-B HDG エンコーダ プッシュスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。
//下のHIGHとLOWで最初の数値が0か1かを設定できる。最初のスタート時は0にならなければならない。
HDG_EncPush_SwPin_val = digitalRead(HDG_EncPush_SwPin); //ボタンの入力(HIGHかLOW)を読み取りvalに格納
//入力がHIGH(ボタンが押されている)なら状態(state)を変更
if((HDG_EncPush_SwPin_val == LOW) && (HDG_EncPush_SwPin_old_val == HIGH)) { //LOW、HIGHを逆にすると押上たときに点灯するようになる
HDG_EncPush_SwPin_state = 1 - HDG_EncPush_SwPin_state; //stateは1からstateを引いた値(つまり、stateが1なら0、0なら1となる)
//delay(10); //この位がチャタリングが起きない(500位が安定している)
}
HDG_EncPush_SwPin_old_val = HDG_EncPush_SwPin_val; //valはもう古くなったので保持しておく
if(HDG_EncPush_SwPin_state ==1){
HDG_EncPush_SW = 1;
}
else {
HDG_EncPush_SW = 0;
}
//==============================================================================================
/////////// loop内 Part-B HDG HOLD タクトスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。
HDG_HOLD_SwPin_val = digitalRead(HDG_HOLD_SwPin);
if((HDG_HOLD_SwPin_val == LOW) && (HDG_HOLD_SwPin_old_val == HIGH)) {
HDG_HOLD_SwPin_state = 1 - HDG_HOLD_SwPin_state;
//delay(10); //この位がチャタリングが起きない(500位が安定している)
}
HDG_HOLD_SwPin_old_val = HDG_HOLD_SwPin_val;
if(HDG_HOLD_SwPin_state ==1){
HDG_HOLD_SW = 1;
}
else {
HDG_HOLD_SW = 0;
}
//==============================================================================================
/////////// loop内 Part-B BANK LIMIT 6モード切り替え スイッチ //////////////////
//==============================================================================================
prev = BankLimit_Cange;
FlightSim.update();
BankLimit_modeSwitchPin.update();
if(BankLimit_modeSwitchPin.fallingEdge()) { //切り替えスイッチが押されたら
++mode; //modeを1つずつ変化させる
if(mode >= Mode_Count) //もしMode_Countより大きくなったら
mode = 0; //0に戻す
}
// ロータリーエンコーダを読む、それが変化したらBankLimit_Cangeにその数値を書き込む
if (mode == BankLimit_0_Mode) {
BankLimit_Cange = 0;
}
if (mode == BankLimit_1_Mode) {
BankLimit_Cange = 1;
}
if (mode == BankLimit_2_Mode) {
BankLimit_Cange = 2;
}
if (mode == BankLimit_3_Mode) {
BankLimit_Cange = 3;
}
if (mode == BankLimit_4_Mode) {
BankLimit_Cange = 4;
}
if (mode == BankLimit_5_Mode) {
BankLimit_Cange = 5;
}
//####### 右パネル Part-C ##########
//==============================================================================================
/////////// loop内 Part-C V/S FPA 切り替えスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。一度スイッチを押したら、離してもONにする設定。
VS_FRA_change_SwPin_val = digitalRead(VS_FRA_change_SwPin);
if((VS_FRA_change_SwPin_val == LOW) && (VS_FRA_change_SwPin_old_val == HIGH)) {
VS_FRA_change_SwPin_state = 1 - VS_FRA_change_SwPin_state;
//delay(10); //この位がチャタリングが起きない(500位が安定している)
}
VS_FRA_change_SwPin_old_val = VS_FRA_change_SwPin_val;
if(VS_FRA_change_SwPin_state ==1){
VS_FRA_change_SW = 1;
} else {
VS_FRA_change_SW = 0;
}
//==============================================================================================
/////////// loop内 Part-C V/S エンコーダ //////////////////
//==============================================================================================
// 1クリックで4つ変化するので4で割って1つずつカウントするようにする
short VSpEncDiff = (VSpEnc.read() - VSpEncPrev) *100 /4;
if (VSpEncDiff) {
// only update prev when we've reached a detent!
//戻り止めに達した場合にのみPREVを更新!
VSpEncPrev = 0;
VSpEnc.write(0);
// datarefを一時的な値にコピー
float verSp = VerticalSpeed;
// 一時的な値に変更を適用
verSp += VSpEncDiff;
// 範囲チェックを行う
while (verSp < -6000) verSp += 1; //エアスピードが -6000 より小さい場合は 1 をプラスする(つまり-6000で止まる)
while (verSp >= 8001) verSp -= 1; //エアスピードが 8001 より大きい場合は 1 をマイナスする(つまり8000で止まる)
// datarefへ検証された新しいエアースピードの数値を書く
VerticalSpeed = verSp;
VSpeedKnob = verSp;
}
//==============================================================================================
/////////// loop内 Part-C V/S FPA タクトスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。
VS_FPA_SwPin_val = digitalRead(VS_FPA_SwPin);
if((VS_FPA_SwPin_val == LOW) && (VS_FPA_SwPin_old_val == HIGH)) {
VS_FPA_SwPin_state = 1 - VS_FPA_SwPin_state;
//delay(10); //この位がチャタリングが起きない(500位が安定している)
}
VS_FPA_SwPin_old_val = VS_FPA_SwPin_val;
if(VS_FPA_SwPin_state ==1){
VS_FPA_SW = 1;
}
else {
VS_FPA_SW = 0;
}
//==============================================================================================
/////////// loop内 Part-C LOC タクトスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。一度スイッチを押したら、離してもONにする設定。
LOC_SwPin_val = digitalRead(LOC_SwPin);
if((LOC_SwPin_val == LOW) && (LOC_SwPin_old_val == HIGH)) {
LOC_SwPin_state = 1 - LOC_SwPin_state;
//delay(10); //この位がチャタリングが起きない(500位が安定している)
}
LOC_SwPin_old_val = LOC_SwPin_val;
if(LOC_SwPin_state ==1){
LOC_SW = 1;
} else {
LOC_SW = 0;
}
//==============================================================================================
/////////// loop内 Part-C APP タクトスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。
APP_SwPin_val = digitalRead(APP_SwPin);
if((APP_SwPin_val == LOW) && (APP_SwPin_old_val == HIGH)) {
APP_SwPin_state = 1 - APP_SwPin_state;
//delay(10); //この位がチャタリングが起きない(500位が安定している)
}
APP_SwPin_old_val = APP_SwPin_val;
if(APP_SwPin_state ==1){
APP_SW = 1;
} else {
APP_SW = 0;
}
//==============================================================================================
/////////// loop内 Part-A AUTO 1000 切り替えスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。
AUTO_1000_changeSwPin_val = digitalRead(AUTO_1000_changeSwPin);
if((AUTO_1000_changeSwPin_val == LOW) && (AUTO_1000_changeSwPin_old_val == HIGH)) {
AUTO_1000_changeSwPin_state = 1 - AUTO_1000_changeSwPin_state;
//delay(10); //この位がチャタリングが起きない(500位が安定している)
}
AUTO_1000_changeSwPin_old_val = AUTO_1000_changeSwPin_val;
if(AUTO_1000_changeSwPin_state ==1){
AUTO_1000_changeSW = 1;
}
else {
AUTO_1000_changeSW = 0;
}
//==============================================================================================
/////////// loop内 Part-C ALTITUDE エンコーダ //////////////////
//==============================================================================================
// スイッチが AUTO の場合
if (AUTO_1000_changeSW == 1) {
short AltEncDiff = (AltEnc.read() - AltEncPrev) *1000 /4;
if (AltEncDiff) {
AltEncPrev = 0;
AltEnc.write(0);
float AltSp = Altitude;
AltSp += AltEncDiff;
while (AltSp < -0) AltSp += 1;
while (AltSp >= 50001) AltSp -= 1;
Altitude = AltSp;
AltKnob = AltSp;
}
}
// スイッチが 1000 の場合
if (AUTO_1000_changeSW == 0) {
short AltEncDiff = (AltEnc.read() - AltEncPrev) *100 /4;
if (AltEncDiff) {
AltEncPrev = 0;
AltEnc.write(0);
float AltSp = Altitude;
AltSp += AltEncDiff;
while (AltSp < -0) AltSp += 1;
while (AltSp >= 50001) AltSp -= 1;
Altitude = AltSp;
AltKnob = AltSp;
}
}
//==============================================================================================
/////////// loop内 Part-C ALTITUDE エンコーダ プッシュスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。一度スイッチを押したら、離してもONにする設定。
ALT_EncPush_SwPin_val = digitalRead(ALT_EncPush_SwPin); //ボタンの入力(HIGHかLOW)を読み取りvalに格納
//入力がHIGH(ボタンが押されている)なら状態(state)を変更
if((ALT_EncPush_SwPin_val == LOW) && (ALT_EncPush_SwPin_old_val == HIGH)) { //LOW、HIGHを逆にすると押上たときに点灯するようになる
ALT_EncPush_SwPin_state = 1 - ALT_EncPush_SwPin_state; //stateは1からstateを引いた値(つまり、stateが1なら0、0なら1となる)
//delay(10); //この位がチャタリングが起きない(500位が安定している)
}
ALT_EncPush_SwPin_old_val = ALT_EncPush_SwPin_val; //valはもう古くなったので保持しておく
if(ALT_EncPush_SwPin_state ==1){
ALT_EncPush_SW = 1;
}
else {
ALT_EncPush_SW = 0;
}
//==============================================================================================
/////////// loop内 Part-C ALT HOLD タクトスイッチ //////////////////
//==============================================================================================
//スイッチの保持設定スクリプト。
ALT_HOLD_SwPin_val = digitalRead(ALT_HOLD_SwPin);
if((ALT_HOLD_SwPin_val == LOW) && (ALT_HOLD_SwPin_old_val == HIGH)) {
ALT_HOLD_SwPin_state = 1 - ALT_HOLD_SwPin_state;
//delay(10); //この位がチャタリングが起きない(500位が安定している)
}
ALT_HOLD_SwPin_old_val = ALT_HOLD_SwPin_val;
if(ALT_HOLD_SwPin_state ==1){
ALT_HOLD_SW = 1;
} else {
ALT_HOLD_SW = 0;
}
//===============================================================================================
/////////// loop内 Part-C Part-C Teensyの電圧がONになっているかを確認 //////////////////
//===============================================================================================
//このLEDだけanalogWriteを使用するためTeensyに直結している。
//ランプの輝度を50に下げている(255がフル)
analogWrite(Teensy_Pawer_ON_LED_Pin, 50);
//####### 中央パネル Part-B ##########
////////////////////////////////////////////////////////////////////////////////////////////////////////
// loop内 Part-A LEDピン 74HC595 シフトレジスタ 経由 /////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
//####### 左パネル Part-A ##########
//==============================================================================================
/////////// loop内 Part-A 74HC595(LED表示)シフトレジスタ A/T ランプ //////////////////
//==============================================================================================
// このパートはまだ調整中!これ以外で点灯するなら、以下に追加していくことになる。
// ①Ap_Mode = (T7Avionics/ap/ap_mode);
// ②At_mode = (T7Avionics/ap/at_mode);
// ③Fd_Visible = (T7Avionics/ap/fd_visible);
// ④Pitch_Mode_Armed = (T7Avionics/ap/pitch_mode_armed);
// ⑤Pitch_Mode_Engaged = (T7Avionics/ap/pitch_mode_engaged);
// ⑥Roll_Mode_Armed = (T7Avionics/ap/roll_mode_armed);
// ⑦Roll_Mode_Engaged = (T7Avionics/ap/roll_mode_engaged);
// ⑧Warn_Flags = (T7Avionics/ap/warn_flags);
if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 5 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == 6 && Pitch_Mode_Engaged == 5 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 6 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 0 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == 7 && Pitch_Mode_Engaged == 6 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 0 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 0 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 5 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 0 && At_mode == 1 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 0 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 5 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 0 && At_mode == 1 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 0 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 0 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 0 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 5 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 1 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 4 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 3 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == 6 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 5 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == 6 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 5 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == 3 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == 3 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 3 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == 7 && Pitch_Mode_Engaged == 6 && Roll_Mode_Armed == 4 && Roll_Mode_Engaged == 3 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 1 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 0 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 5 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == 3 && Roll_Mode_Engaged == 0 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == 3 && Roll_Mode_Engaged == 0 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == 6 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == 3 && Roll_Mode_Engaged == 0 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 0 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 0 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 2 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 0 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 1 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 9 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 9 && Roll_Mode_Armed == 3 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == 6 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == 3 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 3 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 0 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 5,4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 3 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2,3 && Warn_Flags == 0) {
setRegisterPin(AT_74HC595_Pin, HIGH);
}
else{
setRegisterPin(AT_74HC595_Pin, LOW);
}
//==============================================================================================
/////////// loop内 Part-A 74HC595(LED表示)シフトレジスタ LNAV ランプ //////////////////
//==============================================================================================
// このパートはまだ調整中!これ以外で点灯するなら、以下に追加していくことになる。
// ①Ap_Mode = (T7Avionics/ap/ap_mode);
// ②At_mode = (T7Avionics/ap/at_mode);
// ③Fd_Visible = (T7Avionics/ap/fd_visible);
// ④Pitch_Mode_Armed = (T7Avionics/ap/pitch_mode_armed);
// ⑤Pitch_Mode_Engaged = (T7Avionics/ap/pitch_mode_engaged);
// ⑥Roll_Mode_Armed = (T7Avionics/ap/roll_mode_armed);
// ⑦Roll_Mode_Engaged = (T7Avionics/ap/roll_mode_engaged);
// ⑧Warn_Flags = (T7Avionics/ap/warn_flags);
if (Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 4 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2) {
setRegisterPin(LNAV_74HC595_Pin, HIGH);
}
else if (Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 5 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2) {
setRegisterPin(LNAV_74HC595_Pin, HIGH);
}
else if (Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 0 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2) {
setRegisterPin(LNAV_74HC595_Pin, HIGH);
}
else if (Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2) {
setRegisterPin(LNAV_74HC595_Pin, HIGH);
}
else if (Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2) {
setRegisterPin(LNAV_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 3 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2 && Warn_Flags == 0) {
setRegisterPin(LNAV_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == -1 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 0 && Roll_Mode_Armed == 2 && Roll_Mode_Engaged == 5 && Warn_Flags == 0) {
setRegisterPin(LNAV_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 3 && Roll_Mode_Armed == 2 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(LNAV_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 5 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 3 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2 && Warn_Flags == 0) {
setRegisterPin(LNAV_74HC595_Pin, HIGH);
}
else{
setRegisterPin(LNAV_74HC595_Pin, LOW);
}
//==============================================================================================
/////////// loop内 Part-A 74HC595(LED表示)シフトレジスタ VNAV ランプ //////////////////
//==============================================================================================
// ①Ap_Mode = (T7Avionics/ap/ap_mode);
// ②At_mode = (T7Avionics/ap/at_mode);
// ③Fd_Visible = (T7Avionics/ap/fd_visible);
// ④Pitch_Mode_Armed = (T7Avionics/ap/pitch_mode_armed);
// ⑤Pitch_Mode_Engaged = (T7Avionics/ap/pitch_mode_engaged);
// ⑥Roll_Mode_Armed = (T7Avionics/ap/roll_mode_armed);
// ⑦Roll_Mode_Engaged = (T7Avionics/ap/roll_mode_engaged);
// ⑧Warn_Flags = (T7Avionics/ap/warn_flags);
if (Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 5 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2) {
setRegisterPin(VNAV_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 1 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 4 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2 && Warn_Flags == 0) {
setRegisterPin(VNAV_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 3 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2 && Warn_Flags == 0) {
setRegisterPin(VNAV_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 3 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(VNAV_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 3 && Roll_Mode_Armed == 2 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(VNAV_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 5 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 3 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2 && Warn_Flags == 0) {
setRegisterPin(VNAV_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == -1 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3 && Warn_Flags == 0) {
setRegisterPin(VNAV_74HC595_Pin, HIGH);
}
else{
setRegisterPin(VNAV_74HC595_Pin, LOW);
}
//==============================================================================================
/////////// loop内 Part-A 74HC595(LED表示)シフトレジスタ FLCH ランプ //////////////////
//===============================================================================================
// このパートはまだ調整中!これ以外で点灯するなら、以下に追加していくことになる。
// ①Ap_Mode = (T7Avionics/ap/ap_mode);
// ②At_mode = (T7Avionics/ap/at_mode);
// ③Fd_Visible = (T7Avionics/ap/fd_visible);
// ④Pitch_Mode_Armed = (T7Avionics/ap/pitch_mode_armed);
// ⑤Pitch_Mode_Engaged = (T7Avionics/ap/pitch_mode_engaged);
// ⑥Roll_Mode_Armed = (T7Avionics/ap/roll_mode_armed);
// ⑦Roll_Mode_Engaged = (T7Avionics/ap/roll_mode_engaged);
// ⑧Warn_Flags = (T7Avionics/ap/warn_flags);
if (Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 2) {
setRegisterPin(FLCH_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == -1 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 5 && Warn_Flags == 0) {
setRegisterPin(FLCH_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 5 && Warn_Flags == 0) {
setRegisterPin(FLCH_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == -1 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(FLCH_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(FLCH_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == 6 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3 && Warn_Flags == 0) {
setRegisterPin(FLCH_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == 3 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(FLCH_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == 3 && Roll_Mode_Engaged == 0 && Warn_Flags == 0) {
setRegisterPin(FLCH_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == -1 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 0 && Warn_Flags == 0) {
setRegisterPin(FLCH_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 0 && Warn_Flags == 0) {
setRegisterPin(FLCH_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 1 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(FLCH_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3 && Warn_Flags == 0) {
setRegisterPin(FLCH_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == -1 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == 3 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(FLCH_74HC595_Pin, HIGH);
}
else{
setRegisterPin(FLCH_74HC595_Pin, LOW);
}
//==============================================================================================
/////////// loop内 Part-B 74HC595(LED表示)シフトレジスタ HDG HOLD ランプ //////////////////
//==============================================================================================
// このパートはまだ調整中!これ以外で点灯するなら、以下に追加していくことになる。
// ①Ap_Mode = (T7Avionics/ap/ap_mode);
// ②At_mode = (T7Avionics/ap/at_mode);
// ③Fd_Visible = (T7Avionics/ap/fd_visible);
// ④Pitch_Mode_Armed = (T7Avionics/ap/pitch_mode_armed);
// ⑤Pitch_Mode_Engaged = (T7Avionics/ap/pitch_mode_engaged);
// ⑥Roll_Mode_Armed = (T7Avionics/ap/roll_mode_armed);
// ⑦Roll_Mode_Engaged = (T7Avionics/ap/roll_mode_engaged);
// ⑧Warn_Flags = (T7Avionics/ap/warn_flags);
if (Ap_Mode == 1 && At_mode == -1 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 0 && Warn_Flags == 0) {
setRegisterPin(HDG_HOLD_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == -1 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 0 && Warn_Flags == 0) {
setRegisterPin(HDG_HOLD_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 0 && Warn_Flags == 0) {
setRegisterPin(HDG_HOLD_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 0 && Warn_Flags == 0) {
setRegisterPin(HDG_HOLD_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 2 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 0 && Warn_Flags == 0) {
setRegisterPin(HDG_HOLD_74HC595_Pin, HIGH);
}
else{
setRegisterPin(HDG_HOLD_74HC595_Pin, LOW);
}
//####### 右パネル Part-C ##########
//==============================================================================================
/////////// loop内 Part-C 74HC595(LED表示)シフトレジスタ LOC & APP ランプ //////////////////
//==============================================================================================
// このパートはまだ調整中!これ以外で点灯するなら、以下に追加していくことになる。
// ①Ap_Mode = (T7Avionics/ap/ap_mode);
// ②At_mode = (T7Avionics/ap/at_mode);
// ③Fd_Visible = (T7Avionics/ap/fd_visible);
// ④Pitch_Mode_Armed = (T7Avionics/ap/pitch_mode_armed);
// ⑤Pitch_Mode_Engaged = (T7Avionics/ap/pitch_mode_engaged);
// ⑥Roll_Mode_Armed = (T7Avionics/ap/roll_mode_armed);
// ⑦Roll_Mode_Engaged = (T7Avionics/ap/roll_mode_engaged);
// ⑧Warn_Flags = (T7Avionics/ap/warn_flags);
//LOCのLED点灯の場合
if (Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == 3) {
setRegisterPin(LOC_74HC595_Pin, HIGH); //LOCのLED点灯
}
else if (Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3) {
setRegisterPin(LOC_74HC595_Pin, HIGH); //LOCのLED点灯
}
else if (Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 3 && Roll_Mode_Armed == 2 && Roll_Mode_Engaged == 3) {
setRegisterPin(LOC_74HC595_Pin, HIGH); //LOCのLED点灯
}
else if (Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 3 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3) {
setRegisterPin(LOC_74HC595_Pin, HIGH); //LOCのLED点灯
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3 && Warn_Flags == 0) {
setRegisterPin(LOC_74HC595_Pin, HIGH); //LOCのLED点灯
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == 3 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(LOC_74HC595_Pin, HIGH); //LOCのLED点灯
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == 3 && Roll_Mode_Engaged == 0 && Warn_Flags == 0) {
setRegisterPin(LOC_74HC595_Pin, HIGH); //LOCのLED点灯
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 9 && Roll_Mode_Armed == 3 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(LOC_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == -1 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == 3 && Roll_Mode_Engaged == 1 && Warn_Flags == 0) {
setRegisterPin(LOC_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 5 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3 && Warn_Flags == 0) {
setRegisterPin(LOC_74HC595_Pin, HIGH);
}
else{
setRegisterPin(LOC_74HC595_Pin, LOW); //LOCのLED消灯
}
// APPのLED点灯の場合
if (Pitch_Mode_Armed == 6 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == 3 && Roll_Mode_Engaged == 1) {
setRegisterPin(APP_74HC595_Pin, HIGH); //APPののLED点灯
}
else if (Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 6 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3) {
setRegisterPin(APP_74HC595_Pin, HIGH); //APPののLED点灯
}
else if (Pitch_Mode_Armed == 7 && Pitch_Mode_Engaged == 6 && Roll_Mode_Armed == 4 && Roll_Mode_Engaged == 3) {
setRegisterPin(APP_74HC595_Pin, HIGH); //APPののLED点灯
}
else if (Pitch_Mode_Armed == -1 && Pitch_Mode_Engaged == 6 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3) {
setRegisterPin(APP_74HC595_Pin, HIGH); //APPののLED点灯
}
else if (Pitch_Mode_Armed == 6 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3) {
setRegisterPin(APP_74HC595_Pin, HIGH); //APPののLED点灯
}
else if (Ap_Mode == 1 && At_mode == -1 && Fd_Visible == 1 && Pitch_Mode_Armed == 6 && Pitch_Mode_Engaged == 1 && Roll_Mode_Armed == 3 && Roll_Mode_Engaged == 5 && Warn_Flags == 0) {
setRegisterPin(APP_74HC595_Pin, HIGH); //LOCのLED点灯
}
else if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 1 && Pitch_Mode_Armed == 6 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3 && Warn_Flags == 0) {
setRegisterPin(APP_74HC595_Pin, HIGH); //LOCのLED点灯
}
else if (Ap_Mode == 1 && At_mode == -1 && Fd_Visible == 1 && Pitch_Mode_Armed == 6 && Pitch_Mode_Engaged == 8 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3 && Warn_Flags == 0) {
setRegisterPin(APP_74HC595_Pin, HIGH);
}
else if (Ap_Mode == 1 && At_mode == 4 && Fd_Visible == 1 && Pitch_Mode_Armed == 6 && Pitch_Mode_Engaged == 5 && Roll_Mode_Armed == -1 && Roll_Mode_Engaged == 3 && Warn_Flags == 0) {
setRegisterPin(APP_74HC595_Pin, HIGH);
}
else{
setRegisterPin(APP_74HC595_Pin, LOW);
}
//==============================================================================================
/////////// loop内 Part-C 74HC595(LED表示)シフトレジスタ TOGA ランプ //////////////////
//==============================================================================================
// このパートはまだ調整中!これ以外で点灯するなら、以下に追加していくことになる。
// ①Ap_Mode = (T7Avionics/ap/ap_mode);
// ②At_mode = (T7Avionics/ap/at_mode);
// ③Fd_Visible = (T7Avionics/ap/fd_visible);
// ④Pitch_Mode_Armed = (T7Avionics/ap/pitch_mode_armed);
// ⑤Pitch_Mode_Engaged = (T7Avionics/ap/pitch_mode_engaged);
// ⑥Roll_Mode_Armed = (T7Avionics/ap/roll_mode_armed);
// ⑦Roll_Mode_Engaged = (T7Avionics/ap/roll_mode_engaged);
// ⑧Warn_Flags = (T7Avionics/ap/warn_flags);
if (Ap_Mode == 1 && At_mode == 0 && Fd_Visible == 0 && Pitch_Mode_Armed == 0 && Pitch_Mode_Engaged == 0 && Roll_Mode_Armed == 0 && Roll_Mode_Engaged == 0 && Warn_Flags == 0) {
setRegisterPin(Toga_74HC595_Pin, HIGH);
}
else{
setRegisterPin(Toga_74HC595_Pin, LOW);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////// 関数 LEDピン 74HC595(出力)シフトレジスタ経由 ///////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
//####### 左パネル Part-A ##########
//==============================================================================================
/////////// 関数 Part-A 74HC595(LED表示)シフトレジスタ A/P ランプ //////////////////
//==============================================================================================
void updateAutoPilotSwLED(long value) {
if (value == 1) { //T7Avionics/ap/ap_modeを見ている★
setRegisterPin(AP_74HC595_Pin, HIGH); //点灯 (0は74HC595のピン番号)
}
else if (value == 3) {
setRegisterPin(AP_74HC595_Pin, HIGH); //点灯
}
else {
setRegisterPin(AP_74HC595_Pin, LOW); //消灯
}
}
//==============================================================================================
/////////// 関数 Part-A 74HC595(LED表示)シフトレジスタ A/T ランプ //////////////////
//==============================================================================================
//2つ以上のdatarefの組み合わせのためloop内で処理しているのでここには記述しない。
//==============================================================================================
/////////// 関数 Part-A 74HC595(LED表示)シフトレジスタ LNAV ランプ //////////////////
//==============================================================================================
//loop内で処理しているのでここには記述しない。
//==============================================================================================
/////////// 関数 Part-A 74HC595(LED表示)シフトレジスタ VNAV ランプ //////////////////
//==============================================================================================
//loop内で処理しているのでここには記述しない。
//==============================================================================================
/////////// 関数 Part-A 74HC595(LED表示)シフトレジスタ FLCH ランプ //////////////////
//==============================================================================================
//loop内で処理しているのでここには記述しない。
//####### 中央パネル Part-B ##########
//==============================================================================================
/////////// 関数 Part-B 74HC595(LED表示)シフトレジスタ TOGA ランプ //////////////////
//==============================================================================================
//loop内で処理しているのでここには記述しない。
//==============================================================================================
/////////// 関数 Part-B 74HC595(LED表示)シフトレジスタ DISK ランプ //////////////////
//==============================================================================================
void updateDiskSwLED(long value) {
if (value == 0) { //T7Avionics/ap/pitch_mode_engagedを見ている
setRegisterPin(Disk_74HC595_Pin, LOW); //点灯
}
else if (value == 8) {
setRegisterPin(Disk_74HC595_Pin, HIGH); //点灯
}
else {
setRegisterPin(Disk_74HC595_Pin, LOW); //消灯
}
}
//==============================================================================================
/////////// 関数 Part-B 74HC595(LED表示)シフトレジスタ BANK LIMIT 6モード切り替え ランプ ////////////////
//==============================================================================================
void updateBankLimit_chengeLED(long value) {
if (value == 0) {
setRegisterPin(bankAUTO_74HC595_Pin, HIGH);
setRegisterPin(bank5_74HC595_Pin, LOW);
setRegisterPin(bank10_74HC595_Pin, LOW);
setRegisterPin(bank15_74HC595_Pin, LOW);
setRegisterPin(bank20_74HC595_Pin, LOW);
setRegisterPin(bank25_74HC595_Pin, LOW);
}
else if (value == 1) {
setRegisterPin(bankAUTO_74HC595_Pin, LOW);
setRegisterPin(bank5_74HC595_Pin, HIGH);
setRegisterPin(bank10_74HC595_Pin, LOW);
setRegisterPin(bank15_74HC595_Pin, LOW);
setRegisterPin(bank20_74HC595_Pin, LOW);
setRegisterPin(bank25_74HC595_Pin, LOW);
}
else if (value == 2) {
setRegisterPin(bankAUTO_74HC595_Pin, LOW);
setRegisterPin(bank5_74HC595_Pin, LOW);
setRegisterPin(bank10_74HC595_Pin, HIGH);
setRegisterPin(bank15_74HC595_Pin, LOW);
setRegisterPin(bank20_74HC595_Pin, LOW);
setRegisterPin(bank25_74HC595_Pin, LOW);
}
else if (value == 3) {
setRegisterPin(bankAUTO_74HC595_Pin, LOW);
setRegisterPin(bank5_74HC595_Pin, LOW);
setRegisterPin(bank10_74HC595_Pin, LOW);
setRegisterPin(bank15_74HC595_Pin, HIGH);
setRegisterPin(bank20_74HC595_Pin, LOW);
setRegisterPin(bank25_74HC595_Pin, LOW);
}
else if (value == 4) {
setRegisterPin(bankAUTO_74HC595_Pin, LOW);
setRegisterPin(bank5_74HC595_Pin, LOW);
setRegisterPin(bank10_74HC595_Pin, LOW);
setRegisterPin(bank15_74HC595_Pin, LOW);
setRegisterPin(bank20_74HC595_Pin, HIGH);
setRegisterPin(bank25_74HC595_Pin, LOW);
}
else if (value == 5) {
setRegisterPin(bankAUTO_74HC595_Pin, LOW);
setRegisterPin(bank5_74HC595_Pin, LOW);
setRegisterPin(bank10_74HC595_Pin, LOW);
setRegisterPin(bank15_74HC595_Pin, LOW);
setRegisterPin(bank20_74HC595_Pin, LOW);
setRegisterPin(bank25_74HC595_Pin, HIGH);
}
}
/*
//==============================================================================================
/////////// 関数 Part-B 74HC595(LED表示)シフトレジスタ HDG HOLD ランプ //////////////////
//==============================================================================================
//T7Avionics/ap/roll_mode_engaged
void updateHeadingTrackHoldSwLED(long value) {
if (value == 0) {
setRegisterPin(HDG_HOLD_74HC595_Pin, HIGH); //点灯
}
else if (value == 9) {
setRegisterPin(HDG_HOLD_74HC595_Pin, HIGH); //点灯
}
else {
setRegisterPin(HDG_HOLD_74HC595_Pin, LOW); //消灯
}
}
*/
//####### 右パネル Part-C ##########
//==============================================================================================
/////////// 関数 Part-C 74HC595(LED表示)シフトレジスタ V/S FPA ランプ //////////////////
//==============================================================================================
//ここはT7Avionics/ap/pitch_mode_engagedの値を見ている
void updateVsFpaReferenceSwLED(long value) {
if (value == 2) {
setRegisterPin(VS_FPA_74HC595_Pin, HIGH); //点灯
//lc4.shutdown(0, false); //規定の高度に達したら7セグの表示が消える(true)
}
else if (value == 9) {
setRegisterPin(VS_FPA_74HC595_Pin, HIGH); //点灯
//lc4.shutdown(0, false); //規定の高度に達したら7セグの表示が消える(true)
}
else {
setRegisterPin(VS_FPA_74HC595_Pin, LOW); //消灯
//lc4.shutdown(0, true); //VreticalSpeedのボタンをクリックしたら7セグを表示(false)
}
}
//==============================================================================================
/////////// 関数 Part-C 74HC595(LED表示)シフトレジスタ AUTO/1000チェンジ ランプ //////////////////
//==============================================================================================
void updateAUTO_1000_chengeLED(long value) {
if (value == 1) {
setRegisterPin(upAUTO_74HC595_Pin, HIGH);
setRegisterPin(up1000_74HC595_Pin, LOW);
}
if (value == 0) {
setRegisterPin(upAUTO_74HC595_Pin, LOW);
setRegisterPin(up1000_74HC595_Pin, HIGH);
}
}
//==============================================================================================
/////////// 関数 Part-C 74HC595(LED表示)シフトレジスタ ALT HOLD ランプ //////////////////
//==============================================================================================
//T7Avionics/ap/pitch_mode_engagedを見ている
void updateAltitudeHoldSwLED(long value) {
if (value == 1) {
setRegisterPin(ALT_HOLD_74HC595_Pin, HIGH); //点灯
} else{
setRegisterPin(ALT_HOLD_74HC595_Pin, LOW); //消灯
}
}
//==============================================================================================
/////////// 関数 Part-C 74HC595(LED表示)シフトレジスタ LOC ランプ //////////////////
//==============================================================================================
//LOCは複雑でこの1つのdatarefではコントロールできないのでloop内で処理する。ここでは使用しない。
/*
//==============================================================================================
/////////// 関数 Part-C 74HC595(LED表示)シフトレジスタ APP ランプ //////////////////
//==============================================================================================
//APPは複雑でこの1つのdatarefではコントロールできないのでloop内で処理する。ここでは使用しない
// T7Avionics/ap/pitch_mode_armed
void updateApproachSwLED(long value) {
if (value == -1) {
setRegisterPin(APP_74HC595_Pin, HIGH); //点灯
}
else if (value == 6) {
setRegisterPin(APP_74HC595_Pin, HIGH); //点灯
}
else{
setRegisterPin(APP_74HC595_Pin, LOW); //点灯
}
}
*/