#define KEY_PIN 20
#define LED_PIN 14

volatile bool key_down = false;    // 是否按下了按键
void led_task(void *param_t){
  pinMode(LED_PIN, OUTPUT);
  while(1){
    if(key_down){ //pdTRUE 和 pdPASS 值是相同的,用哪个都可以
      digitalWrite(LED_PIN,!digitalRead(LED_PIN));
      vTaskDelay(200);
      key_down = false;
    }
    vTaskDelay(100);  // 一定要让出CPU,否则会一直在这里循环
  }
}

// 按键监控
void key_task(void *param_t){
  pinMode(KEY_PIN, INPUT_PULLUP);   // 设置为带输出的上拉
  while(1){
    if(digitalRead(KEY_PIN)==LOW){
      // 按键按下了
      key_down = true;
      vTaskDelay(200); // 等待去抖,这里不用换算,是为了节省时间,我们不需要精确延时
    }
    vTaskDelay(100);  // 一定要让出CPU,否则会一直在这里循环
  }
}

void setup() {
  Serial.begin(115200);
  xTaskCreate(key_task, "KEY-MON", 1024, NULL, 1, NULL);
  xTaskCreate(led_task, "LED-DSP", 1024, NULL, 1, NULL);
}

void loop() {
  delay(10);
}