1 Reply Latest reply on Apr 19, 2020 11:29 PM by JuyoungJ_06

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

    NoTa_4591161

      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