X-Plane コクピットの自作に挑戦!
プッシュスイッチでLEDをONにしたままにする
Hightのときに単純にLEDを点灯する方法は色々記述したサイトは多いが、プッシュボタンのように一度押して離すとOnからOffになる、Offになっっても、そのままLEDを点灯させる方法が仲々見つからなかったがありました。
ここを参考にしました。ありがとうございます。
ここを参考にしました。ありがとうございます。
プッシュスッチによるtoggle動作のプログラム
これは、2つのピンが必要になる。入力ピン(プッシュボタン)と出力ピン(LED等)。
時々、やはりチャタリングが起きているのか、押しても点灯しないなど反応しないときもあります。
時々、やはりチャタリングが起きているのか、押しても点灯しないなど反応しないときもあります。
// Filename:SW03 const int led=7; //LEDピン const int sw=15; //プッシュボタンのピン int currentState, previousState=LOW; //現在の状態、以前の状態 int ledState=LOW; //最初のLEDの状態 void setup(){ pinMode(led, OUTPUT); //LEDは出力 pinMode(sw, INPUT); //スイッチは入力 } void loop(){ currentState=digitalRead(sw); if(currentState != previousState){ //エッジ検出 previousState=currentState; if(currentState == HIGH) { ledState = !ledState; // トグルアクション digitalWrite(led, ledState); } } }
LED点灯をトグルにする方法がもう一つあります。これも時々反応しないときがあり、押し直しが必要なときがあるが、大体トグルで点灯、消灯を行うことができます。
//Example 03A: ボタンを押すとLEDが点灯し、 //ボタンを離したあとも点いたままにする。 //バウンジングを解消する簡単な方法を取り入れた改良版 #define LED 11 #define BUTTON 10 int val = 0; //入力ピンの状態がこの変数(val)に記憶される int old_val = 0; //valの前の値を保存しておく変数 int state = 0; //LEDの状態(0ならオフ、1ならオン) void setup() { pinMode(LED, OUTPUT); //ArduinoにLEDが出力であると伝える pinMode(BUTTON, INPUT); //BUTTONは入力に設定 } void loop() { val = digitalRead(BUTTON); //入力を読み取りvalに格納 //入力がHIGH(ボタンが押されている)なら状態(state)を変更 if((val == LOW) && (old_val == HIGH)) { //LOW、HIGHを逆にすると押上たときに点灯するようになる state = 1 - state; delay(10); //この位がチャタリングが起きない(10だと時々起きる) } old_val = val; //valはもう古くなったので保持しておく if(state ==1){ digitalWrite(LED, HIGH); //最初をHIGHにすると最初から点灯する } else { digitalWrite(LED, LOW); } }
実際のX-Planeの場合です
例としてB747-400のF/Dスイッチでやってみました。プッシュボタンでは、一般的なスケッチでいくとON-OFFになってしまって、ONの状態OFFの状態を保持できませんが、下のスケッチでそれが実現できます。1回押したらON、もう一回押したらOFFになります。
例としてB747-400のF/Dスイッチでやってみました。プッシュボタンでは、一般的なスケッチでいくとON-OFFになってしまって、ONの状態OFFの状態を保持できませんが、下のスケッチでそれが実現できます。1回押したらON、もう一回押したらOFFになります。
const int sw=10; //プッシュボタンのピン //LEDピン(X-Planeに出力) int currentState, previousState=LOW; //現在の状態、以前の状態 //最初のLEDの状態(X-Planeに出力の状態) FlightSimInteger AutothrottleEngage; void setup(){ pinMode(sw, INPUT); AutothrottleEngage = XPlaneRef("sim/cockpit/autopilot/autopilot_mode"); } void loop(){ FlightSim.update(); currentState=digitalRead(sw); if(currentState != previousState){ //エッジ検出 previousState=currentState; if(currentState == HIGH) { AutothrottleEngage = !AutothrottleEngage; // ここがトグルアクション digitalWrite(sw, AutothrottleEngage); } } }
- 低価格コクピットの自作
- DataRefEditor
- プルアップとプルダウン
- Nav1の周波数の設定をロータリーエンコーダで行う
- スロットルコントロール
- イグニッションキーコントロール
- 針路バグコントロール
- 針路バグとエレベータトリムの切り替え
- 回転動作を粗いと微細で設定 & 3つのモードの切り替え
- ギアのアップダウンコントロール
- ロータリーエンコーダの色々な数値の設定
- トグルスイッチコントロール
- ロータリースイッチコントロール
- Teensy&キーボードボタン
- Teensy&ジョイスティックボタン
- プッシュスイッチでトグルを実現
- プッシュスイッチでLEDをONにしたままにする
- Teensy & I2C接続キャラクターLCDモジュール
- 7セグで数字を表示
- X-Plane LED ON/OFF
- マウスホイールの活用
- B 737-800
- B747-400
- B 777 Worldliner
- SiteMap
Contents