TaskHandle_t taskProcessButtonHandle;
const uint8_t BUTTON_PIN = 4;
const uint8_t LED_PIN = 2;
void IRAM_ATTR buttonISR() {
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
vTaskNotifyGiveFromISR(taskProcessButtonHandle, &xHigherPriorityTaskWoken);
if (xHigherPriorityTaskWoken) portYIELD_FROM_ISR();
}
void taskProcessButton(void *pvParams) {
while (1) {
if (ulTaskNotifyTake(pdTRUE, portMAX_DELAY)) {
digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // Alterna LED
Serial.println("Botão pressionado!");
}
}
}
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), buttonISR, FALLING);
xTaskCreate(taskProcessButton, "ButtonTask", 2048, NULL, 2, &taskProcessButtonHandle); // Prioridade 2 (alta)
}
void loop() {}