センサー・デバイス (SNS)
センサー・デバイス (SNS) ビヘイビア
センサーや各種デバイスの手続きを定型化したクラスを用意しています。
温度センサーなど、センサー稼働開始→待ち時間→センサー値の読み出しといった手続きが共通のものもあります。
I2Cセンサーの取り扱い前に
Wire.begin()
を実施しておいてください。スリープ復帰後は、Wireの再初期化は自動で行われるため特別な記述は必要ありません(注:ユーザコード上から明示的に Wire.end()
を呼び出した場合は、再初期化を wakeup()
に記述します)void setup() {
auto&& brd = the_twelite.board.use<PAL_AMB>();
..
Wire.begin();
brd.sns_SHTC3.begin();
brd.sns_LTR308ALS.begin();
}
読み出し開始後の手続きはセンサーの種類ごとに違いますが例えば
<PAL_AMB>
のセンサーは2つとも時間経過を管理します。時間経過をセンサーオブジェクトに伝えるには process_ev()
メソッドを用います。void loop() {
auto&& brd = the_twelite.board.use<PAL_AMB>();
// mostly process every ms.
if (TickTimer.available()) {
// wait until sensor capture finish
if (!brd.sns_LTR308ALS.available()) {
brd.sns_LTR308ALS.process_ev(E_EVENT_TICK_TIMER);
}
if (!brd.sns_SHTC3.available()) {
brd.sns_SHTC3.process_ev(E_EVENT_TICK_TIMER);
}
..
上記の例では1msおきのTickTimerを起点にして時間経過を伝えています。
E_EVENT_TICK_TIMER
はセンサーオブジェクトに1msの経過を伝えるものです。スリープ復帰などで十分な時間が経過したときは替わりに
E_EVENT_START_UP
を渡します。センサーオブジェクトは速やかに読み出し可能として処理されます。いずれの処理も現実世界の時間の経過と一致することを保証しているわけではありません。実際の経過時間が不足している場合は、センサーがエラーを返したり、期待しない値を返すことになります。
void setup(uint32_t arg1 = 0, uint32_t arg2 = 0)
センサーの初期化を行います。
void begin(uint32_t arg1 = 0, uint32_t arg2 = 0)
void end()
センサーの取得を開始, 終了する。
void process_ev(uint32_t arg1, uint32_t arg2 = 0)
待ち時間処理のセンサーの場合は
arg1
にE_EVENT_TICK_TIMER
またはE_EVENT_START_UP
を与え時間の経過を知らせます。このメソッド呼出し後に、必要な時間が経過していればavailableになり、センサー値の読み出しが可能になります。bool available()
センサーが読み出し条件を満足したときに
true
を返します。bool probe()
(対応しているセンサーのみ)センサーが接続されているときに
true
を返します。probe()
直後の初回の通信が失敗することがある。最終更新 1yr ago