TWELITEプログラムの続きです。
前回は、親機のプログラムの中を見て、子機からの通信に対応できてない部分を修正しました。
alasixosaka.hatenablog.com
今回は、子機のプログラムをどう修正したかを書くことにします。いささか、順序が逆になったきらいはありますが。
まず、プログラムを修正するにあたって、プログラムを含むフォルダを丸ごとコピーします。Windowsではコピーしたフォルダには、xxxx コピー といった名前が付きますので名前を修正します。プログラム名に日本語が含まれているとエラーになるようです。今回は、SHT3xに対応した部分を取ってしまって、BMP280(BME280)に特化したプログラムにするので、名前も、ActE_BME280としました。フォルダ内のプログラム本体も同じ名前にしておきます。
プログラムの修正分ですが、上から順に書いていきます。
インクルードや変数などの初期化の部分
まず、インクルードの部分でSNS_SHT3xをコメントアウトします。
// use twelite mwx c++ template library #include <TWELITE> #include <NWK_SIMPLE> #include <SNS_BME280> //#include <SNS_SHT3X> #include <STG_STD>
それから、PALに関する設定もコメントアウトします。
/// if use with PAL board, define this. /* #undef USE_PAL #ifdef USE_PAL // X_STR makes string literals. #define X_STR(s) TO_STR(s) #define TO_STR(s) #s #include X_STR(USE_PAL) // just use with PAL board (to handle WDT) #endif */
それから、Sensor Objectの部分もSHT3xの部分はコメントアウトします。
//SNS_SHT3X sns_sht3x; //bool b_found_sht3x = false;
そして、アナログポート関連の設定もコメントアウトします。
//uint16_t u16_volt_vcc = 0; //uint16_t u16_volt_a1 = 0;
Setup関数
Setupの中でまた、PALの設定が出てきますのでこれもコメントアウトします。
/* #ifdef USE_PAL /// use PAL board (for WDT handling) auto&& brd = the_twelite.board.use<USE_PAL>(); // register board (PAL) #endif */
アナログポートのセットアップのコメントアウトです。
// setup analogue //Analogue.setup();
SHT3xセンサーを探す部分もコメントアウト。
// check SHT3x /* { bool b_alt_id = false; sns_sht3x.setup(); if (!sns_sht3x.probe()) { bool b_alt_id = false; delayMicroseconds(100); // just in case, wait for devices to listen furthre I2C comm. sns_sht3x.setup(0x45); // alternative ID if (sns_sht3x.probe()) b_found_sht3x = true; } else { b_found_sht3x = true; } if (b_found_sht3x) { Serial << crlf << "..found sht3x" << (b_alt_id ? " at 0x45" : " at 0x44"); } } */
loop関数
loopの中でアナログポートの値を読む部分をコメントアウト
/* if (Analogue.available()) { if (!u16_volt_vcc) { u16_volt_vcc = Analogue.read(PIN_ANALOGUE::VCC); u16_volt_a1 = Analogue.read(PIN_ANALOGUE::A1); } } */
INITの処理の所でSHT3xセンサーに測定指示を出す部分もコメントアウト
/* if (b_found_sht3x) { sns_sht3x.begin(); } */
CAPTURE_PREの所で、SHT3xの測定待ち部分をコメントアウト
/* if (b_found_sht3x && !sns_sht3x.available()) { sns_sht3x.process_ev(E_EVENT_TICK_TIMER); } */
センサーの測定終了判定の部分も、SHT3xの部分をコメントアウト
// both sensors are finished. if ( (!b_found_bme280 || (b_found_bme280 && sns_bme280.available())) //&& (!b_found_sht3x || (b_found_sht3x && sns_sht3x.available())) ) { new_state = true; // do next state immediately. eState = E_STATE::CAPTURE; }
CAPTUREの部分で、SHT3x関連のシリアル出力をコメントアウト
/* if (b_found_sht3x) { Serial << crlf << format("..%04d/finish sensor capture.", millis() & 8191) << crlf << " SHT3X : T=" << sns_sht3x.get_temp() << 'C' << " H=" << sns_sht3x.get_humid() << '%'; } */
アナログポートのデータをシリアル出力する部分もコメントアウト
/* if (1) { Serial << crlf << format(" ADC : Vcc=%dmV A1=%04dmV", u16_volt_vcc, u16_volt_a1); } */
TXの処理の部分で、無線で送るパケットの中身を修正します。アプリ固有の4文字以外は、温度のデータのみにしてしまいます。これで、前回の親機が受け取ったデータの処理の部分と整合が取れるようになります。
// prepare packet payload pack_bytes(pkt.get_payload() // set payload data objects. , make_pair(FOURCHARS, 4) // just to see packet identification, you can design in any. //, uint16_t(sns_sht3x.get_temp_cent()) // temp //, uint16_t(sns_sht3x.get_humid_per_dmil()) , uint16_t(sns_bme280.get_temp_cent()) // temp //, uint16_t(sns_bme280.get_humid_per_dmil()) //, uint16_t(sns_bme280.get_press()) //, uint16_t(u16_volt_vcc) //, uint16_t(u16_volt_a1) );
修正は以上です。