Community Translation - Measuring Duration of CapSense Button Press Using SysTickTimer - KBA226863

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Kenshow
Level 8
Level 8
Distributor - Marubun (Japan)
50 solutions authored 25 solutions authored 10 solutions authored

Hi,

I would like to translate KBA226863 into Japanese.

Thanks,

Kenshow

Measuring Duration of CapSense Button Press Using SysTickTimer - KBA226863

Translated by Kenshow

==============================

タイトル: SysTickTimerを使用してCapSenseボタンを押す時間を測定する - 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ウィジェットに使用できます。

==============================

10-Apr-2020

Kenshow

0 Likes
1 Reply
JennaJo
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

Hello, Kenshow-san

We receive your translation, it will be internally reviewed and be published to KBA to Community.

After upload, You will receive the points as the word of KBA.

Please note that due to the current volume of works, Please bear with me for the delayed the response.

It can be delayed, but it will be surely processed.

Thanks for your contribution to CDC!

Will keep you update the status.

Thanks,

Jenna Jo

Jenna Jo