#define KEY_PIN 20
#define LED_PIN 14
SemaphoreHandle_t led = NULL; // 二进制信号量
void led_task(void *param_t){
pinMode(LED_PIN, OUTPUT);
while(1){
if(xSemaphoreTake(led, 1000) == pdTRUE){ //pdTRUE 和 pdPASS 值是相同的,用哪个都可以
digitalWrite(LED_PIN,!digitalRead(LED_PIN));
vTaskDelay(200);
}
}
}
// 按键监控
void key_task(void *param_t){
pinMode(KEY_PIN, INPUT_PULLUP); // 设置为带输出的上拉
while(1){
if(digitalRead(KEY_PIN)==LOW){
// 按键按下了
xSemaphoreGive(led);
vTaskDelay(200); // 等待去抖,这里不用换算,是为了节省时间,我们不需要精确延时
}
}
}
void setup() {
Serial.begin(115200);
led = xSemaphoreCreateBinary(); //创建二进制信号量
xTaskCreate(key_task, "KEY-MON", 1024, NULL, 1, NULL);
xTaskCreate(led_task, "LED-DSP", 1024, NULL, 1, NULL);
}
void loop() {
delay(10);
}