TWELITE DIPのプログラミング
アクトを使ったプログラミングを考えている人は「The MWX Library」を読んでください。
このマニュアルを1度は「最初から最後まで」丁寧に読むことをお勧めします。
正直なところ、最初は理解できない部分が多くあるかもしれませんが、あれこれ試行錯誤するよりはずっと早道になります。
次に、自分が欲しい機能があれば、その「サンプルアクト」全体を印刷してください。
その印刷したコードを見ながら、マニュアルの説明を見ると理解しやすくなります。
サンプルコードは同じ内容の説明部分が重複して出てきます。その部分は読み飛ばしてください。
印刷したサンプルコードはあなたのマニュアルになります。
C++でのプログラミングを知らない人(私もそうです)はコードや用語の意味を都度調べてください。
調べたことは印刷したサンプルコードに書き込むと良いでしょう。
DIPのピンについて説明します。
TWELITE DIPを購入すると、ピン配置のカードが付いてきます。基本はそれに従ってください。
デジタル入力、デジタル出力、アナログ入力、その他に制御用のピン等があります。
トラブルを避けるためにもカードのピン配置を守るのが良いでしょう。
アプリケーションID、チャンネル、デバイスIDについて説明します。
複数のDIP間で通信を行う時、グループにまとめる必要があります。
そのグループの識別になる物が「アプリケーションID」になります。例:0x1234abcd
テストでは「0x1234abcd」でも構いませんが、実戦では「アプリケーションID」の命名規則を守ってください。
通信には電波を使います。どの電波を使うかが「チャンネル」になります。
同じグループは同じチャンネルを使ってください。
グループ内で個々のDIPを識別する必要がある場合は「デバイスID」を付与します。
例えば、給水口の制御をするDIPを0x01、排水口の制御をするDIPを0x02、水深を調べるDIPを0x03などです。
全体の制御をおこなうDIPを0x09とすると、
DIP0x09が「水を入れたい」ときは送信先0x01に信号を送ります。
DIP0x09が「水を抜きたい」ときは送信先0x02に信号を送ります。
水深を調べるDIP0x03は送信先0x09に水深のデータを送ります。
ただし、特別な「デバイスID」があります。「0x00」は親機、「0xFE」は全ての子機という番号です。
子機が10台あったとしてそのすべてに個々の番号を付けなくても、「0xFE」としておけば済みます。
親機「0x00」は全ての子機「0xFE」からデータを受信できるし、送信できます。
アクトプログラムの基本的な構成を説明します。
以下はサンプルアクトact1.cppの内容です。( <- XXX は説明を追加しています。)
-----
#include <TWELITE>
/*** the setup procedure (called on boot) */ <- 起動時に実行するのがsetupです。
void setup() {
pinMode(18, OUTPUT); <- デジタル出力を18ピンに設定
digitalWrite(18, LOW); // TURN DO1 ON <- 18ピンの出力をLowに設定
Serial << "--- act1 (blink LED) ---" << crlf; <- モニターに文字を出力
}
/*** loop procedure (called every event) */ <- setup後にloopに入ります。
void loop() {
delay(500); // 500ms delay <- 0.5秒時間待ち
digitalWrite(18, HIGH); // TURN DO1 OFF
delay(500); // 500ms delay
digitalWrite(18, LOW); // TURN DO1 ON
}
-----
プログラムが開始されると、まずsetup()関数が呼び出されます。
その後、loop()関数が呼び出されます。
loopの名前が付いていますが、無限ループのコードにはなっていません。
4つの命令が実行されたら、終了です。
終了したら、省電力モードになります。
省電力モードから復帰する為の何らかのイベント(event)を待ちます。
1m秒間隔で動いているTickTimerが割込み(event)を行います。
このイベントで再びloop()関数を呼び出します。
この繰り返しが続くことになります。
ユーザーに提供されているsetup()やloop()関数はTWELITEのシステムの一部分を借りているイメージです。
TWELITEのシステムがsetup()やloop()関数をシステムの条件(event)で呼び出し(call)しているので、コール関数と呼ばれます。
イベントとしてはTickTimerやデジタル入力ピンの変化や通信を受信したとかがあります。
何らかの変化を感知したらloop()関数が呼び出されると私は理解しています。
※この解釈が間違っていたらごめんなさい。
TWELITEには act というプログラミング環境が提供されています。
私はC:\monoフォルダを作成してダウンロードしたMWSTAGE-2022-08_win10-1.zipをそこに展開しました。
actのサンプルはC:\mono\MWSTAGE\MWSDK\Act_samplesフォルダ内にあります。ショートカットを作成しておくと便利です。
actを書き換える(コンパイル)するプログラムはC:\mono\MWSTAGE\MWSDK\TWELITE_Stage.exeです。
これもショートカットを作成しておくと便利です。
ハードウェアとしてはTWELITE DIPのプログラムの書き換えにTWELITE R2(ライター)を使用します。
以下に自作アプリをactを使って書き換える手順を示します。
例としてact1を利用して新規に「blinkLED」で保存し、コンパイルしてDIPに書き込んでみます。
1.C:\mono\MWSTAGE\MWSDK\Act_samplesフォルダを開く。
2.act1フォルダを選択し、コピーして同じフォルダ内に貼り付けると「act1-コピー」ができるので、フォルダ名を「blinkLED」に変える。
3.「blinkLED」フォルダを開き、「act1.cpp」から「blinkLED.cpp」に名前を変える。
4.「blinkLED.cpp」をエディタで編集する。(今回は編集しません)
5.上書き保存する。
※フォルダ名とソースファイル名共に「blinkLED」にしてください。
6.TWELITE R2(ライター)にTWELITE DIPを載せる。向きを間違わないように。
7.パソコンのUSBにTWELITE R2(ライター)を接続する。(TWELITE DIPに通電)
8.TWELITE_Stage.exeを起動する。
9.シリアルポート選択が表示されるので、「1:TWELITE R2」をクリックする。
10.TWELITE@STAGEのメインメニューになるので「2:アプリ書換」をクリック
11.TWELITE@STAGE アプリ書換のメニューになったら「2:Actビルド&書換」をクリック
12.Act ビルドの画面になるので、「blinkLED」をクリックします。もし見当たらない場合は▽か△をクリックします。
以上でコンパイルが始まり、TWELITE DIPにファームウェアが書き込まれる。
もし、プログラムしたDIPが何らかのメッセージを出力する場合は、インタラクティブモードでメッセージを表示する事ができます。
13.確認が終わった、または必要がなければ、TWELITE_Stage.exeを終了する。[×]またはAlt+Q
14.パソコンからTWELITE R2(ライター)のUSBケーブルを引き抜き(通電切断)DIPを取り出す。
困ったら!
◎もし、5:シリアルポート選択[未接続]となっていたら、TWELITE R2(ライター)とパソコン間のUSB接続を確認して
「5:シリアルポート選択[未接続]」をクリック→説明の9.へ
◎もし、知らない画面になったら「Esc」を(1回もしくは2回)押すと「TWELITE@STAGEのメインメニュー」に戻れます。
注意!
◎サンプルのactを利用する場合は、必ず「actのフォルダ」ごとコピーしてください。
※actのフォルダ名がアクトビルド時のプログラム一覧の名前になります。
◎作成したフォルダはMWSTAGE\MWSDK\Act_samplesフォルダ内に配置してください。
自作のソースファイルをサンプルアクトとは別の場所に置き、コマンドでコンパイルする方法もあります。