SysTickTimerを使用してCapSenseボタンを押す時間を測定する - KBA226863 - Community Translated (JA)

Version 3

    Community Translated by NoTa_4591161       Version: **

     

    Translation - English: Measuring Duration of CapSense Button Press Using SysTickTimer - KBA226863

     

    質問:

    CapSense®センサがアクティブである期間、SysTickタイマを使用してどのように測定できますか?

     

    回答:

    SysTickタイマを使用してボタンを押した時間を測定するには、次の手順に従います。

    1. CapSenseコンポーネントをトップデザインに配置し、ボタンウィジェットを追加します。
    2. main.cファイル内で、必ずCapSenseのコンポーネントとSysTickタイマの両方をCapSense_Start()とCySysTickStart()のAPIを使用して初期化されていることを確認します。
    3. 未使用のコールバックスロットを見つけ、CySysTickSetCallback()の API を使用してコールバックを割り当てます。
    4. 割り込みが生成され(1 msごと)、センサがアクティブな場合は、カウンタ値をインクリメントします。
    5. センサが解放されたら、ミリ秒単位でセンサがアクティブであった時間であるカウンタ値を処理します。

     

    main.cコード例は次のとおりです。

     

    #include <project.h>

    #include <stdio.h>

     

    // マクロ

    #define TRUE 1

    #define FALSE 0

     

    /* グローバル変数 */

     

    // ボタンを押している時間をミリ秒単位で決定するカウンタ値

    uint32 counterVal;

    // センサーのタッチ状態を決定するブール変数

    _Bool button_active;

     

    /* 関数プロトタイプ */

     

    // SysTick ISRコールバック関数

    void SysTickISRCallback(void);

     

    int main()

    {

        uint32 i;// forループ変数

        char msg[30];// UARTに出力するメッセージ

     

     

        /* 変数を初期化します。 */

        counterVal=0;

        button_active=FALSE;

     

        /* グローバル割り込みを有効にします。 */

        CyGlobalIntEnable;

     

        CySysTickStart();// SysTickタイマーを開始

        UART_Start();// UARTコンポーネントを開始します

        CapSense_Start();// CapSenseコンポーネントを開始します

     

     

        /* 未使用のコールバックスロットを見つけて、コールバックを割り当てます。 */

        for (i = 0u; i < CY_SYS_SYST_NUM_OF_CALLBACKS; ++i)

        {

            if (CySysTickGetCallback(i) == NULL)

            {

                /* コールバックを設定 */

    CySysTickSetCallback(i, SysTickISRCallback);

                break;

            }

        }

     

     

        //すべてのCapSenseウィジェットをスキャンします

        CapSense_ScanAllWidgets(); 

        for(;;)

        {

            if(!CapSense_IsBusy())// CapSenseがビジーでない場合

            {

                // button 0 ウィジェットを処理します

    CapSense_ProcessWidget(CapSense_BUTTON0_WDGT_ID);

     

           

                if(CapSense_IsWidgetActive(CapSense_BUTTON0_WDGT_ID))// button 0 ウィジェットがアクティブな場合

    {

    button_active=TRUE;             

    }

                else // button 0 ウィジェットがアクティブでない場合

    {

    button_active=FALSE;              

    }

     

                // ボタンが離された場合、つまりリフトオフ状態

                if((!button_active)&&(counterVal!=0))

    {

    sprintf(msg,"Duration = %ld ms\r\n", counterVal);

                    // UARTを介してボタンが押された時間を出力します

    UART_UartPutString(msg);

    counterVal=0;// カウンタをリセット

    }         

                // すべてのCapSenseウィジェットをスキャンします

    CapSense_ScanAllWidgets();         

            }

        }

    }

     

     

    // Systick ISRコールバック関数

    void SysTickISRCallback(void)

    {

        if(button_active)// ボタンが押された場合

        {

            counterVal++;// カウンタをインクリメントします

        }

    }

     

     

    注:このメソッドはボタンに限定されません。このメソッドは、あらゆるCapSenseウィジェットに使用できます。