MobiflightとWASMモジュールを使用して点滅LEDを作成する方法

2022年5月6日
今回の開発環境 Window 11
MobiFlightバージョン9.3.2
Mega 2560 Arduino互換ボード
MobiFlight is an open source project that allows you to create your own home coc…
github.com

パーキングブレーキがオンの状態で点滅するLEDを設定します。この手順は、Mobiflight、wasmモジュール、および少なくとも1つのLEDがボードに接続されていて、それをMobiflightモジュールで構成します。

2つのOutputを使った方式

1つはシミュレーターの時間変数を使用した出力構成を作成。
この変数名を、出力構成ウィンドウの「変数」フィールドに入力します。この変数は、シミュレーターが開始してから経過した時間を秒単位で表示します。

この変数に整数演算を追加すると以下のようになり、毎秒0と1の交互の値を表示します。

(E:SIMULATION TIME, second) 2 %

この構成は以下のマッピングだけで実際のLEDのピンとかの作成はしない。ここで作成したLED点滅はこれを指定すればどのLEDでも使えるようになる。

まずメインウインドウで以下を作成、名前は「Blnk1second」とする。

「Blnk1second」の右端のEditで下のように作成する。他の3つのタブでは何も設定しない。

LED点滅のための設定はこれだけで完了です。
後はこれを実際のLED(例えばパーキングブレーキ用のLED)でこの「Blnk1second」を指定するだけ。

一般的なパーキングブレーキLEDの作成

パーキングブレーキのLEDを作成しこれを点滅させる、他のLEDにすることもできます。

まずLEDモジュールを作成し、アップロードを実行する。

ここでは名前を「ParkingBrake LED Lamp」とします。

ボードでLEDを使用するように[Display]タブを構成します。TestボタンでLEDが点灯するか確認。

「Sim Variable」タブで以下のように設定する。

Select Presetでは BRAKE PARKING INDICATOR を指定します。

Show Preset Codeでは自動的に (A:BRAKE PARKING INDICATOR,Bool) が入っているはずです。

この部分は、一般的なパーキングブレーキのLEDと同じです。これで、パーキングブレーキインジケーターでオンとオフを切り替えるLEDができました。

次に、More OptionsのTransformフィールドを使用して点滅機能を追加します。

$*#

更にConfig References設定でAdd Referencesボタンをクリックし「Blink1second」を指定し、チェックマークを付けます。その構成参照(config ref)のプレースホルダー、この場合は「#」記号になります。
この式の両方の変数は0または1のいずれかの値のみを取るため、2つを乗算すると、値も0(いずれかの変数が0に等しい場合)または1(両方の変数が1に等しい場合のみ)になります。

MF構成を保存します。パーキングブレーキがオンのとき、LEDは1秒に1回点滅します。

実際に点滅が始まるのは以下の画面になったときになる。但しMobiFlightのAutiRunが有効になっている必要がある。

この設定は以下の画面でも点滅を確認することができる。点滅が開始されると矢印の数値が1と0に交互に変化する。上のスタート画面になるまでは何の反応も無い。

ここまでは実際に実行できることを確認している。以下の説明はチュートリアルサイトをそのまま載せただけで未確認です。

複数のLED点滅を指定する

この方法には、点滅出力構成が実際に点滅する変数とは別であるという便利さがある。そのため、必要に応じて、これを利用して点滅構成を他の複数の点滅出力でも以下のように設定して使用できるようになる。

画像

1つの出力構成を使用する代替方法

同じ効果は、2つの変数とすべての計算を出力構成変数フィールドに移動することにより、1つの出力構成でのみ達成できます。構文は、イベント名がないことを除いて、他のWASMモジュールイベントスクリプトと同じです。前に説明したのと同じ数学演算が、次のステートメントを使用して1つの式に凝縮されます。

(A:BRAKE PARKING INDICATOR,Bool) (E:SIMULATION TIME, second) 2 % *

画像

他のユースケースで考えられるバリエーション

このタイプの手法は、前提条件と式を変更して、LCD画面の値を点滅させたり、3ステートLEDインジケータ(OFF-ON-BLINK)を実装したりする場合に使用できます。

まばたきの頻度は、まばたきで使用される式を変更することによっても調整できます。たとえば、E:変数に2を掛けることで、頻度を1秒あたり2回に増やすことができます。

(E:SIMULATION TIME, second) 2 * 2 %

逆に、変数を5ずつ下げることにより、頻度を5秒に1回に減らすことができます。

(E:SIMULATION TIME, second) 5 / 2 %

これらのすべての例で、バイナリカウントを見てきました。ただし、このカウントは、モジュロ演算(%)で除算器を変更することにより、他のアプリケーションで変更できます。したがって、たとえば、毎秒0から5までのカウントは、次のように簡単にプログラムできます。

(E:SIMULATION TIME, second) 6 %

(A:BRAKE PARKING INDICATOR,Bool) (E:SIMULATION TIME, second) 2 % *

または2秒ごと:

(E:SIMULATION TIME, second) 2 / 6 %