#define KEY_PIN 20
#define LED_PIN 14
static TaskHandle_t xTaskLed = NULL; // 点灯的任务
volatile TickType_t keyDeounce = 0; // 按下按钮的时间
void led_task(void *param_t){
pinMode(LED_PIN, OUTPUT);
uint32_t ulNotificationValue;
while(1){
if(xTaskGetTickCount() - keyDeounce<200){
printf("[LEDP] 等待信号到达...\n");
ulNotificationValue = ulTaskNotifyTake(pdTRUE, portMAX_DELAY); // 第一个参数表示取值完毕后清零
printf("[LEDP] 收到信号,开关灯\n");
if(ulNotificationValue>0){
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
}
vTaskDelay(1000);
}
}
}
// 中断服务函数
void IRAM_ATTR ISR() {
keyDeounce = xTaskGetTickCountFromISR(); // 记录下按下的时间,用于放抖动,正式开发中不要这样写,有Bug
vTaskNotifyGiveFromISR(xTaskLed, 0);
}
void setup() {
Serial.begin(115200);
xTaskCreate(led_task, "LED-DSP", 10240, NULL, 1, &xTaskLed);
// 安装中断
pinMode(KEY_PIN, INPUT_PULLUP);
attachInterrupt(KEY_PIN, ISR, FALLING);
}
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
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
led1:A
led1:C