#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);
}