Buttons
ディジタル入力管理クラス (mwx::periph_buttons)
ディジタル入力の変化を検出します。このクラスは、同じ検出値が複数回得られたときに 変化を検出します。メカ式のボタンのチャタリングの影響を小さくするのに有効です。
void setup(uint8_t max_history);
パラメータの
max_history
は、begin()
で設定可能な参照回数の最大値です。ここではメモリーの確保と初期化を行います。void begin(uint32_t bmPortMask,
uint8_t u8HistoryCount,
uint16_t tick_delta);
Buttons
の動作を開始します。1番目のパラメータbmPortMask
は監視対象のディジタル入力のビットマップを指定します。bit 0がDIO 0, ... , bit N がDIO Nに対応します。複数指定することができます。2番目のu8HistoryCount
は値の確定をするのに必要な回数です。3番目のtick_delta
は値の確認を行う間隔をmsで指定します。値の確定には
u8HistoryCount*tick_delta
[ms]かかることになります。例えばu8HistoryCount
=5, tick_delta
=4の場合は、状態の確定に最低約20msかかります。確認は
TickTimer
のイベントハンドラで行っています。割り込みハンドラではないので、処理等の遅延の影響を受けますが、メカ式ボタン等のチャタリング抑制には十分です。void end()
Buttons
の動作を終了します。inline bool available()
変化が検出されたときに
true
を返します。read()
を実行するとクリアされます。bool read(uint32_t& u32port, uint32_t& u32changed)
availableになったとき呼び出します。
u32port
は現在の入力DIOのビットマップ、u32changed
は変化が検出されたDIOのビットマップです。Buttonsが動作していない場合は
false
を返します。Buttonsが動作を開始した時点では、DIOの入力状態は未確定です。値が確定した時点でavailable になります。このとき
read()
で読み出すビットマップのMSB(bit31)が1にセットされます。動作確定を要するため、入力値が定常的に変化するポートを監視する目的では利用できません。
スリープ前にButtonsが稼働状態であれば、復帰後に再開します。再開後、初回確定を行います。