text: /* Touch Pad Read Example
  
     This example code is in the Public Domain (or CC0 licensed, at your option.)
  
     Unless required by applicable law or agreed to in writing, this
     software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
     CONDITIONS OF ANY KIND, either express or implied.
  */
  #include <stdio.h>
  #include "freertos/FreeRTOS.h"
  #include "freertos/task.h"
  #include "driver/touch_pad.h"
  #include "esp_log.h"
  
  #define TOUCH_BUTTON_NUM    14
  
  static const char * TAG = "touch read";
  static const touch_pad_t button[TOUCH_BUTTON_NUM] = {
      TOUCH_PAD_NUM1,
      TOUCH_PAD_NUM2,
      TOUCH_PAD_NUM3,
      TOUCH_PAD_NUM4, 
      TOUCH_PAD_NUM5,
      TOUCH_PAD_NUM6,
      TOUCH_PAD_NUM7,
      TOUCH_PAD_NUM8,
      TOUCH_PAD_NUM9,
      TOUCH_PAD_NUM10,
      TOUCH_PAD_NUM11,
      TOUCH_PAD_NUM12,
      TOUCH_PAD_NUM13,
      TOUCH_PAD_NUM14
  };
  
  /*
    Read values sensed at all available touch pads.
   Print out values in a loop on a serial monitor.
   */
  static void tp_example_read_task(void *pvParameter)
  {
      uint32_t touch_value;
      
      /* Wait touch sensor init done */
      vTaskDelay(100 / portTICK_RATE_MS);
      printf("Touch Sensor read, the output format is: \nTouchpad num:[raw data]\n\n");
  
      while (1) {
          for (int i = 0; i < TOUCH_BUTTON_NUM; i++) {
              touch_pad_read_raw_data(button[i], &touch_value);    // read raw data.
              printf("T%d: [%4d] ", button[i], touch_value);
          }
          printf("\n");
          vTaskDelay(200 / portTICK_PERIOD_MS);
      }
  }
  
  void app_main(void)
  {
      /* Initialize touch pad peripheral. */
      touch_pad_init();
      for (int i = 0; i < TOUCH_BUTTON_NUM; i++) {
          touch_pad_config(button[i]);
          touch_pad_set_thresh(button[i], TOUCH_PAD_THRESHOLD_MAX);
      }
  
      /* Denoise setting at TouchSensor 0. */
      touch_pad_denoise_t denoise = {
              /* The bits to be cancelled are determined according to the noise level. */
              .grade = TOUCH_PAD_DENOISE_BIT4,    
              .cap_level = TOUCH_PAD_DENOISE_CAP_L7,
      };
      touch_pad_denoise_set_config(denoise);
      touch_pad_denoise_enable();
      ESP_LOGI(TAG, "Denoise function init");
  
      /* Enable touch sensor clock. Work mode is "timer trigger". */
      touch_pad_set_fsm_mode(TOUCH_FSM_MODE_TIMER);
      touch_pad_fsm_start();
      
      /* Start task to read values by pads. */
      xTaskCreate(&tp_example_read_task, "touch_pad_read_task", 2048, NULL, 5, NULL);
  }
  