このアクトには以下が含まれます。Analogueアクトの機能M1を読み取り、親機か子機かを決めます。クラスにより、チャタリングの影響を小さくするため、連続で同じ値になったときにはじめて変化が通知されます。変化があったときには通信を行います。値を、自身が親機の場合は子機へ、子機の場合は親機宛に送信します。DO1:LEDの配線をしておく。DO1:LEDの配線をしておく。<STG_STD>全てのアクトで<TWELITE>をインクルードします。<BRD_APPTWELITE>をインクルードしておきます。インクルードしています。mwx::crlf;}大まかな流れは、各部の初期設定、各部の開始となっています。the_twelite.network.use<NWK_SIMPLE>();システムの振る舞いを決めるためのビヘイビアオブジェクトを登録します。インタラクティブモードの設定管理で合ったり、ボードサポート、また無線パケットのネットワーク記述です。setup()内で登録しないと動作しません。ID;インタラクティブモードの初期化を行います。setオブジェクトを取得しています。続いて以下の処理を行っています。アプリケーション名を"BRD_APPTWELITE"に設定(メニューで利用される)デフォルトのアプリケーションIDとチャネル値を書き換える不要な項目を削除するset.reload()により保存された設定値を読み出すOPT_BITSとLIDの値を変数にコピーする読み出したインタラクティブモードの設定の反映については後述します。秒の間をあけて入力するとインタラクティブモード画面を出すことが出来ます。メニューに表示していますが、このサンプルでは使用していません。the_tweliteこのオブジェクトはTWENETの中核としてふるまいます。the_twelite.board.use<BRD_APPTWELITE>();ボードの登録(このアクトでは<BRD_APPTWELITE>を登録しています)。登録したいボードの名前を指定します。ユニバーサル参照(auto&&)にて得られた戻り値として、参照型でのボードオブジェクトが得られます。このオブジェクトにはボード特有の操作や定義が含まれます。以下ではボードオブジェクトを用い、M1ピンの状態を確認しています。M1ピンがLOWであれば、LID=0、つまり親機アドレスと設定します。動作させるには初期設定が必要です。アプリケーションIDや無線チャネルの設定は必須といえます。setはインタラクティブモードから読み出した設定の一部(アプリケーションIDや無線チャネルなど)反映させます。反映される項目は<STG_STD>の解説を参照してください。受信回路をオープンにする指定です。operator)として使用しています。MWXライブラリでは、C++標準ライブラリの入出力利用にならって上記のような設定やシリアルポートの入出力等で利用します。ライブラリでは利用できません。std::endl;次にネットワークを登録します。<NWK_SIMPLE>を指定します。2,3行目は、<NWK_SIMPLE>の設定です。先にインタラクティブモードの設定値を反映させます。反映される項目はLIDと再送回数です。このアプリケーションではM1ピンの状態によってLID=0にする場合があるため、3行目で再度LIDを設定しています。AnalogueADC(アナログディジタルコンバータ)を取り扱うクラスオブジェクトです。ANALOGUE::KICK_BY_TIMER0);初期化Analogue.setup()で行います。パラメータのtrueはADC回路の安定までその場で待つ指定です。2番目のパラメータは、ADCの開始をTimer0に同期して行う指定です。PIN_ANALOGUE::VCC));ADCを開始するにはAnalogue.begin()を呼びます。パラメータはADC対象のピンに対応するビットマップです。ビットマップを指定するのにpack_bits()関数を用います。可変数引数の関数で、各引数には1を設定するビット位置を指定します。101010の値が戻ります。この関数はconstexpr指定があるため、パラメータが定数のみであれば定数に展開されます。パラメータと指定されるBRD_APPTWELITE::にはPIN_AI1..4が定義されています。App_Tweliteで用いるAI1..AI4に対応します。割り当てられています。PIN_ANALOGUE::にはADCで利用できるピンの一覧が定義されています。開始は、割り込みハンドラ内で行います。値の変化を検出します。Buttonsでは、メカ式のボタンのチャタリング(摺動)の影響を軽減するため、一定回数同じ値が検出されてから、値の変化とします。Buttons.setup()で行います。値の確定に必要な検出回数ですが、設定可能な最大値を指定します。内部的にはこの数値をもとに内部メモリの確保を行っています。1番目のパラメータは検出対象のDIOです。2番めのパラメータは状態を確定するのに必要な検出回数です。3番めのパラメータは検出間隔です。LOWの状態が確定します。ButtonsでのDIO状態の検出はイベントハンドラで行います。イベントハンドラは、割り込み発生後にアプリケーションループで呼ばれるため割り込みハンドラに比べ遅延が発生します。アプリケーションの制御をタイマー起点で行っているため、このアクトでも同じようにタイマー割り込み・イベントを動作させます。1msごとに動作しているシステムのTickTimerを用いても構いません。上記の例の1番目のパラメータはタイマーの周波数で32Hzを指定しています。2番目のパラメータをtrueにするとソフトウェア割り込みが有効になります。Timer0.begin()を呼び出したあと、タイマーが稼働します。オブジェクトは、初期化や開始手続きなく利用できます。mwx::crlf;このサンプルでは始動時のメッセージとしていくつかのシステム設定値を表示しています。型の文字列や、int型(他の整数型はNG)、printf()とほぼ同じ振る舞いをするformat()、改行文字を出力するcrlfなどを<<演算子に与えます。サンプル中では名前空間mwx::を省略している場合もあります。上記ではmwx::crlfと記載していますがcrlfと記載しても構いません。mwx::名前空間は、一部を省略可能とするように設計しています。ライブラリのメインループからコールバック関数として呼び出されます。なるのを待って、その処理を行うのが基本的な記述です。ここではアクトで使用されているいくつかのオブジェクトの利用について解説します。ライブラリのメインループは、事前にFIFOキューに格納された受信パケットや割り込み情報などをイベントとして処理し、そののちloop()が呼び出されます。モードに入り、低消費電流で新たな割り込みが発生するまでは待機します。したがってCPUが常に稼働していることを前提としたコードはうまく動作しません。なり、Buttons.read()により読み出します。