BTMライブラリ(連照式 DIO 入力 )
機械式のボタンでは、チャタリングの発生により押し下げが正しく検知できない場合があります。BTMライブラリでは連照によりボタンの状態確定を行う方法を提供します。
初期化
以下の例では、8msごとの判定で、5連続で同一値となった場合に変化を確定します。判定は、外部の割り込みハンドラ(TimerTimer など)から呼び出します。
#include "btnMgr.h"
#define u32PortInputMask ((1UL << 11) | (1UL << 12) | (1UL << 13))
static tsBTM_Config sBTM_Config; //!< ボタン入力(連照により状態確定する)管理構造体
static PR_BTM_HANDLER pr_BTM_handler; //!< ボタン入力用のイベントハンドラ (TickTimer 起点で呼び出す)
...
// 初期化
memset(&sBTM_Config, 0, sizeof(tsBTM_Config));
sBTM_Config.bmPortMask = u32PortInputMask;
sBTM_Config.u16Tick_ms = 8; // 判定周期
sBTM_Config.u8MaxHistory = 5; // 5回同じ値で確定
sBTM_Config.u8DeviceTimer = 0xFF; // TickTimer を流用する。
pr_BTM_handler = prBTM_InitExternal(&sBTM_Config);
// BTM 処理開始
vBTM_Enable();DIOの連照判定
以下の例ではTickTimerの割り込みハンドラ中でpr_BTM_handler を呼び出します。IO 状態を読み出して、連照判定を実施します。状態が変化したときの取得方法は後述します。
またpr_BTM_handler の引数としてタイマー周期を与えており、呼び出しごとにこの値分だけ時間が経過したとして内部計算されます。
DIOの変化の検出
bBTM_GetState() 関数を実行し TRUE のときに、連照による変化があったと検出します。
以下の例では TickTimerのイベント(E_AHI_DEVICE_TICK_TIMER )のイベント処理部で DIO の変化を確認しています。
最終更新