センサー・デバイス (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を渡します。センサーオブジェクトは速やかに読み出し可能として処理されます。
いずれの処理も現実世界の時間の経過と一致することを保証しているわけではありません。実際の経過時間が不足している場合は、センサーがエラーを返したり、期待しない値を返すことになります。
センサー共通メソッド
setup()
void setup(uint32_t arg1 = 0, uint32_t arg2 = 0) センサーの初期化を行います。
begin(), end()
void begin(uint32_t arg1 = 0, uint32_t arg2 = 0)
void end()センサーの取得を開始, 終了する。
process_ev()
void process_ev(uint32_t arg1, uint32_t arg2 = 0)待ち時間処理のセンサーの場合はarg1にE_EVENT_TICK_TIMERまたはE_EVENT_START_UPを与え時間の経過を知らせます。このメソッド呼出し後に、必要な時間が経過していればavailableになり、センサー値の読み出しが可能になります。
available()
bool available()センサーが読み出し条件を満足したときにtrueを返します。
probe()
bool probe()(対応しているセンサーのみ)センサーが接続されているときにtrueを返します。
probe()直後の初回の通信が失敗することがある。
最終更新