前回、DataRefsの MCPの COURSEのパラメータが分かったので、これを ArdSimXから Arduino に渡してみようと思います
ついでに、ArdSimXと Electric PanelのLED表示のテストも兼ねて。
まずは DataRefsパラメータですが
キャプテン側 「laminar/B738/autopilot/course_pilot」
コパイロット側 「laminar/B738/autopilot/course_copilot」
ですね
この値を、ArdSimXのコンフィグ「data.cfg」に記述します
コンフィグを直接書く方法は公式サイトでも解説されていないので、あくまで自分が調べた範囲ですが
今のところわかっているのは、左から
ID : ArdSimXが、Arduinoに渡すパラメータID
データタイプ : データ型の区別のようです
パラメータ名 :
カラム : パラメータの値が配列だった場合のカラム番号
という感じになっているようです
次に Arduino側の設定ですが、表示する LEDに MAX7219を使用しているため そのままでは動かせません
(74HC595(シフトレジスタ)には対応しているので、もしかしたら動くのかもしれませんが・・・)
そのため、Arduino側で MAX7219用のライブラリを使って独自にプログラムを書きます
まず LedControlというライブラリを GitHubから「LedControl-1.0.6.zip」をダウンロードして
ArduinoIDEを起動し、ArdSimX同様 Zip形式のライブラリをインストールします

インストールできたら、Arduinoのスケッチに独自のプログラムを書き足していきます
ArdSimXは、Arduino側で独自のプログラムを書けるように ProgOut関数が用意されているので
ここに data.cfgに記述したIDを書くだけで、ArdSimXから渡された値を取得できるようになっています
プログラムが書けたらコンパイルし、Arduinoに書き込んで準備完了です

初期設定時に MAX7219ライブラリの "clearDisplay" を呼び出しているので、最初はLEDは消灯します
ArdSimXと Arduinoをリンクすると LEDの表示が "000" になります。
この時点で、X-Plane11から Arduinoに COURSEデータが送られたことが分かります

ElectricPanelの「DC AMPS」がキャプテン側 COURSE、「CPS FREQ」がコパイロット側 COURSEの値です
あとは、MCPのキャプテン・コパイロットそれぞれの COURSEセレクトを回し、それぞれのCOURSEの値に連動して
ElectricPanelの LEDが変化すれば成功です! ・・・とはいえ、ElecPanelに COURSEが出るのは変な感じですね(汗

今回も Youtubeに動画をアップしてみました
ついでに、ArdSimXと Electric PanelのLED表示のテストも兼ねて。
まずは DataRefsパラメータですが
キャプテン側 「laminar/B738/autopilot/course_pilot」
コパイロット側 「laminar/B738/autopilot/course_copilot」
ですね
この値を、ArdSimXのコンフィグ「data.cfg」に記述します
@ ================= INFO ================= Board #1 - Arduino (USB) ------------------------------------------------------- @ ================= CONFIG ================= *1-1U [O] 1 0 laminar/B738/autopilot/course_pilot 2 0 laminar/B738/autopilot/course_copilot |
コンフィグを直接書く方法は公式サイトでも解説されていないので、あくまで自分が調べた範囲ですが
今のところわかっているのは、左から
ID : ArdSimXが、Arduinoに渡すパラメータID
データタイプ : データ型の区別のようです
パラメータ名 :
カラム : パラメータの値が配列だった場合のカラム番号
という感じになっているようです
次に Arduino側の設定ですが、表示する LEDに MAX7219を使用しているため そのままでは動かせません
(74HC595(シフトレジスタ)には対応しているので、もしかしたら動くのかもしれませんが・・・)
そのため、Arduino側で MAX7219用のライブラリを使って独自にプログラムを書きます
まず LedControlというライブラリを GitHubから「LedControl-1.0.6.zip」をダウンロードして
ArduinoIDEを起動し、ArdSimX同様 Zip形式のライブラリをインストールします

インストールできたら、Arduinoのスケッチに独自のプログラムを書き足していきます
#include <LedControl.h> #include <ArdSimX.h> LedControl lc = LedControl(12, 11, 10, 2); float COURSE_PILOT = -1; float COURSE_COPILOT = -1; char characters[3]; void setup() { for (int index=0; index < lc.getDeviceCount(); index++) { lc.shutdown(index, false); lc.setIntensity(index, 5); lc.clearDisplay(index); } BoardNumber 1; } void loop() { ArdSimScan; } void ProgOut(byte id, float val) { switch (id) { case 1: if ( COURSE_PILOT != val ) { COURSE_PILOT = val; ElecPanelDigit(3, val); } break; case 2: if ( COURSE_COPILOT != val ) { COURSE_COPILOT = val; ElecPanelDigit(0, val); } break; } } void ElecPanelDigit(int digit, float value) { dtostrf(value, 3, 0, characters); if ( value < 100 ) { characters[0] = '0'; } if ( value < 10 ) { characters[1] = '0'; } lc.setChar(0, digit, characters[2], false); lc.setChar(0, (digit + 1), characters[1], false); lc.setChar(0, (digit + 2), characters[0], false); } |
ArdSimXは、Arduino側で独自のプログラムを書けるように ProgOut関数が用意されているので
ここに data.cfgに記述したIDを書くだけで、ArdSimXから渡された値を取得できるようになっています
プログラムが書けたらコンパイルし、Arduinoに書き込んで準備完了です

初期設定時に MAX7219ライブラリの "clearDisplay" を呼び出しているので、最初はLEDは消灯します
ArdSimXと Arduinoをリンクすると LEDの表示が "000" になります。
この時点で、X-Plane11から Arduinoに COURSEデータが送られたことが分かります

ElectricPanelの「DC AMPS」がキャプテン側 COURSE、「CPS FREQ」がコパイロット側 COURSEの値です
あとは、MCPのキャプテン・コパイロットそれぞれの COURSEセレクトを回し、それぞれのCOURSEの値に連動して
ElectricPanelの LEDが変化すれば成功です! ・・・とはいえ、ElecPanelに COURSEが出るのは変な感じですね(汗

今回も Youtubeに動画をアップしてみました
私の方はcompassを作り直し始めました、時間があると何かと気になります(汗
FSXやP3Dに関しては、ホームコックピットの製作について、既にいろいろな情報がありますが
X-Planeは、この辺りの情報が少ないなと思っていて
少しでも情報を出していけたらと思っています
あとは、SIOCやProsim等特定の環境に依存せず、汎用のインターフェースを使って
どこまでやれるか・・というところですね(苦笑