goo blog サービス終了のお知らせ 

Like The Wind

「メモ程度に。」な趣味ブログです

ArdSimXで DataRefsの値を直接取ってみる

2018年05月11日 | フライトシム
前回、DataRefsの MCPの COURSEのパラメータが分かったので、これを ArdSimXから Arduino に渡してみようと思います
ついでに、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に動画をアップしてみました


最新の画像もっと見る

2 コメント(10/1 コメント投稿終了予定)

コメント日が  古い順  |   新しい順
Unknown (fuji 3)
2018-05-16 21:08:30
さっぱりわかりませんが(笑)着実に進捗しているようですね。
私の方はcompassを作り直し始めました、時間があると何かと気になります(汗
返信する
Unknown (s86ed1)
2018-05-18 15:15:43
分かりにくい内容になってしまってすみませんm(__)m
FSXやP3Dに関しては、ホームコックピットの製作について、既にいろいろな情報がありますが
X-Planeは、この辺りの情報が少ないなと思っていて
少しでも情報を出していけたらと思っています
あとは、SIOCやProsim等特定の環境に依存せず、汎用のインターフェースを使って
どこまでやれるか・・というところですね(苦笑
返信する

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。