セクションの複数ページをまとめています。 印刷またはPDF形式で保存...

もとのページに戻る

2024-11-14 現在

PAL_AMB-usenap

環境センサーパルを使ったサンプル
    環境センサーパル AMBIENT SENSE PAL を用いて、センサー値の取得を行います。PAL_AMB サンプルを改良し、センサーデータ取得中の待ち時間(約50ms)を、スリープで待つようにします。

    アクトの機能

    • 環境センサーパル AMPIENT SENSE PAL を用い、センサー値の取得を行います。
    • コイン電池で動作させるための、スリープ機能を利用します。
    • センサデータ取得中にもスリープ機能を利用します。

    アクトの解説

    begin()

    begin()関数はsetup()関数を終了し(そのあとTWENETの初期化が行われる)一番最初のloop()の直前で呼ばれます。

    void begin() {
    	sleepNow(); // the first time is just sleeping.
    }

    setup()終了後に初回スリープを実行します。setup()中にセンサーデータ取得を開始していますが、この結果は評価せず、センサーを事前に一度は動かしておくという意味あいで、必ずしも必要な手続きではありません。

    wakeup()

    起床後の手続きです。以下の処理を行います。

    • まだセンサーデータの取得開始をしていない場合、センサーデータ取得を行い、短いスリープに入る。
    • 直前にセンサーデータ取得開始を行ったので、データを確認して無線送信する。
    void wakeup() {
    	if (!b_senser_started) {
    		// delete/make shorter this message if power requirement is harder.
    		Serial	<< mwx::crlf
    				<< "--- PAL_AMB:" << FOURCHARS << " wake up ---"
    				<< mwx::crlf
    				<< "..start sensor capture again."
    				<< mwx::crlf;
    
    		startSensorCapture();
    		b_senser_started = true;
    
    		napNow(); // short period sleep.
    	} else {
    		Serial << "..wake up from short nap.." << mwx::crlf;
    
    		auto&& brd = the_twelite.board.use<PAL_AMB>();
    
    		b_senser_started = false;
    
    		// tell sensors waking up.
    		brd.sns_LTR308ALS.process_ev(E_EVENT_START_UP);
    		brd.sns_SHTC3.process_ev(E_EVENT_START_UP);
    	}
    }

    上記の分岐をグローバル変数のb_sensor_startedにより制御しています。!b_sensor_startedの場合はセンサー取得開始(startSensorCapture())を行い、napNow()により短いスリープに入ります。時間は100msです。

    napNow()によるスリープ復帰後、b_sensor_started==trueの節が実行されます。ここでは、2つのセンサーに対してE_EVENT_START_UPイベントを通知しています。このイベントは、センサーの取得が終了するのに十分な時間が経過したことを意味します。この通知をもとにsns_LTR308ALSsns_SHTC3はavailableになります。この後loop()に移行し、無線パケットが送信されます。

    napNow()

    ごく短いスリープを実行する。

    void napNow() {
    	uint32_t u32ct = 100;
    	Serial << "..nap " << int(u32ct) << "ms." << mwx::crlf;
    	the_twelite.sleep(u32ct, false, false, TWENET::SLEEP_WAKETIMER_SECONDARY);
    }

    sleepのパラメータの2番目をtrueにすると前回のスリープ復帰時刻をもとに次の復帰時間を調整します。常に5秒おきに起床したいような場合設定します。

    3番目をtrueにするとメモリーを保持しないスリープになります。復帰後はwakeup()は呼び出されじ、電源再投入と同じ処理になります。

    4番目はウェイクアップタイマーの2番目を使う指定です。ここでは1番目は通常のスリープに使用して、2番目を短いスリープに用いています。このアクトでは2番目を使う強い理由はありませんが、例えば上述の5秒おきに起床したいような場合、短いスリープに1番目のタイマーを用いてしまうとカウンター値がリセットされてしまい、経過時間の補正計算が煩雑になるため2番目のタイマーを使用します。