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

もとのページに戻る

2024-11-14 現在

Buttons

デジタル入力管理クラス (mwx::periph_buttons)
    デジタル入力の変化を検出します。このクラスは、同じ検出値が複数回得られたときに変化を検出します。メカ式のボタンのチャタリングの影響を小さくするのに有効です。

    メソッド

    setup()

    void setup(uint8_t max_history);

    パラメータのmax_historyは、begin()で設定可能な参照回数の最大値です。ここではメモリーの確保と初期化を行います。

    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のイベントハンドラで行っています。割り込みハンドラではないので、処理等の遅延の影響を受けますが、メカ式ボタン等のチャタリング抑制には十分です。

    end()

    void end()

    Buttonsの動作を終了します。

    available()

    inline bool available()

    変化が検出されたときにtrueを返します。read()を実行するとクリアされます。

    read()

    bool read(uint32_t& u32port, uint32_t& u32changed)

    availableになったとき呼び出します。u32portは現在の入力DIOのビットマップ、u32changedは変化が検出されたDIOのビットマップです。

    Buttonsが動作していない場合はfalseを返します。

    動作について

    初回の値確定

    Buttonsが動作を開始した時点では、DIOの入力状態は未確定です。値が確定した時点でavailableになります。このときread()で読み出すビットマップのMSB(bit31)が1にセットされます。

    動作確定を要するため、入力値が定常的に変化するポートを監視する目的では利用できません。

    スリープ

    スリープ前にButtonsが稼働状態であれば、復帰後に再開します。再開後、初回確定を行います。