TWELITEをプログラムする(BMP280を動かす その3)

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)
);

修正は以上です。