static TaskHandle_t xLEDTask = NULL;
// 拨盘控制线程
void dial_task(void *param_t) {
  const byte INDIALPIN = 14;
  const byte PULSEPIN = 13;
  pinMode(INDIALPIN, INPUT_PULLUP);
  pinMode(PULSEPIN, INPUT_PULLUP);

  byte counter = 0;
  boolean inDialPinLastState;
  boolean pulsPinLastState;
  inDialPinLastState  = digitalRead(INDIALPIN);
  pulsPinLastState    = digitalRead(PULSEPIN);

  while (1) {
    boolean inDialPinState  = digitalRead(INDIALPIN);
    boolean pulsPinState    = digitalRead(PULSEPIN);
    if (inDialPinState != inDialPinLastState) {
      if (!inDialPinState) {
        counter = 0;
      } else {
        if (counter) {
          counter = counter % 10;
          uint32_t ulEventGroup = 1 << counter;
          xTaskNotify( xLEDTask,      // 任务句柄
                       ulEventGroup,  // 设置的值
                       eSetBits);     // 采用设置方式(或运算)
        }
      }
      inDialPinLastState = inDialPinState;
    }
    if (pulsPinLastState != pulsPinState) {
      if (!pulsPinLastState) {
        counter++;
      }
      pulsPinLastState = pulsPinState;
    }
  }
}

//LED控制线程
void led_task(void *param_t){
  byte led_pins[9] = {42, 41, 40, 39, 38, 37, 36, 35, 0};
  for (byte pin:led_pins) pinMode(pin, OUTPUT);   // 初始化引脚为输出状态
  uint32_t ulNotifiedValue;
  while(1){
    xTaskNotifyWait( pdFALSE,           // 等待前不清除状态
                     ULONG_MAX,         // 获得数据后置位所有,ULONG_MAX = 0xFFFFFFFF,也就是0b11111111111111111111111111111111
                     &ulNotifiedValue,  // 获取Wait的值
                     portMAX_DELAY );
    if(ulNotifiedValue & (1 << 0) == 1) {  // 如果是第一位,则表示要关闭所有LED
      for(int i = 1; i <= 9; i++) {
        digitalWrite(led_pins[i - 1], LOW);
      }
    }

    // 循环判断其他9位是否有要点亮
    for (int i=1; i<=9; i++) {
      if (ulNotifiedValue & (1 << i)) {
        digitalWrite(led_pins[i-1], HIGH);
      }
    }
  }
}

void setup() {
  Serial.begin(115200);
  Serial.println("Hello, ESP32-S3!");
  xTaskCreate(dial_task, "Dial-Panel", 10240, NULL, 1, NULL);
  xTaskCreate(led_task, "LEDS", 10240, NULL, 1, &xLEDTask);
  vTaskDelete(NULL);  // 自宫
}

void loop() {
  delay(10);
}
esp:0
esp:1
esp:2
esp:3
esp:4
esp:5
esp:6
esp:7
esp:8
esp:9
esp:10
esp:11
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:20
esp:21
esp:35
esp:36
esp:37
esp:38
esp:39
esp:40
esp:41
esp:42
esp:45
esp:46
esp:47
esp:48
esp:3V3.1
esp:3V3.2
esp:RST
esp:5V
esp:GND.1
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:GND.4
dialer1:GND
dialer1:DIAL
dialer1:PULSE
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
led5:A
led5:C
led6:A
led6:C
led7:A
led7:C
led8:A
led8:C
led9:A
led9:C