テンプレートコードです。
act0は中身が空でしたがScratchには以下のコードが含まれます。
void setup() {/*** SETUP section */txreq_stat = MWX_APIRET(false, 0);// the twelite main classthe_twelite<< TWENET::appid(APP_ID) // アプリケーションID<< TWENET::channel(CHANNEL) // チャネル<< TWENET::rx_when_idle(); // 受信有// Register Networkauto&& nwk = the_twelite.network.use<NWK_SIMPLE>();nwk << NWK_SIMPLE::logical_id(0xFE); // 子機、特定アドレス指定なし(0xFE)/*** BEGIN section */Buttons.begin(pack_bits(PIN_BTN), 5, 10); // ボタン処理初期化the_twelite.begin(); // start twelite!/*** INIT message */Serial << "--- Scratch act ---" << mwx::crlf;}
アプリケーションID APP_ID
, 無線チャネルCHANNEL
、受信有、子機アドレス0xFE
として始動します。
void begin() {Serial << "..begin (run once at boot)" << mwx::crlf;}
始動時setup()
の後に1回だけ呼び出されます。メッセージの表示のみ。
if (Buttons.available()) {uint32_t bm, cm;Buttons.read(bm, cm);if (cm & 0x80000000) {// the first capture.}Serial << int(millis()) << ":BTN" << format("%b") << mwx::crlf;}
Buttonsによる連続参照により状態を確定します。ボタン状態が変化したらシリアルに出力します。
while(Serial.available()) {int c = Serial.read();Serial << '[' << char(c) << ']';switch(c) {case 'p': ... // millis() を表示case 't': ... // 無線パケットを送信 (vTransmit)case 's': ... // スリープする}}
シリアルから1文字読み込んで、入力文字に応じた処理をします。
if (the_twelite.receiver.available()) {auto&& rx = the_twelite.receiver.read();// just dump a packet.Serial << format("rx from %08x/%d",rx.get_addr_src_long(), rx.get_addr_src_lid()) << crlf;}
パケットを受信したら、送信元のアドレス情報を表示します。
void wakeup() {Serial << int(millis()) << ":wake up!" << mwx::crlf;}
スリープ起床時に最初に呼び出されます。メッセージの表示のみ。
MWX_APIRET vTransmit() {Serial << int(millis()) << ":vTransmit()" << mwx::crlf;if (auto&& pkt = the_twelite.network.use<NWK_SIMPLE>().prepare_tx_packet()) {// set tx packet behaviorpkt << tx_addr(0xFF) // 同報通信=ブロードキャスト<< tx_retry(0x1) // 再送1回<< tx_packet_delay(100,200,20); // 送信時遅延100-200msの間に送信、再送間隔20ms// 送信データの指定(アプリケーションごとに決める)pack_bytes(pkt.get_payload(), make_pair("SCRT", 4) // 4文字識別子, uint32_t(millis()) // タイムスタンプ);// 送信要求を行うreturn pkt.transmit();}// .prepare_tx_packet() 時点で失敗しているreturn MWX_APIRET(false, 0);}
送信要求を行う最小限の手続きです。
この関数を抜けた時点では、まだ要求は実行されていません。しばらく待つ必要があります。この例では100-200msの送信開始の遅延があるため、送信が開始されるのは早くて100ms後です。