X-Plane B777 Woldliner Arduinoプログラミング
このプロジェクト、X-Plane B777 WoldlinerのオートパイロットーコックピットパネルのArduinoプログラムです。
このまま、コピーしてArduinoに貼り込んだら使えます。
ただし、TeensyControlsプラグインとArduinoにTeensyduinoをインストールが完了していることが必要です。
このプラグラムはまだ完全ではありません。後、問題としてLEDの点灯/消灯が非常に複雑でまだ完璧に動作していません。
是非皆さんも勉強のつもりでバグの修正をお願いします。それでよかったら、このプログラムを使っていただきたいとおもいます。
このまま、コピーして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); //点灯 } } */