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) );
修正は以上です。