//#include <FreeRTOS.h>

#define BUTTON 1
#define LED    4

SemaphoreHandle_t sem;

void task_led(void *params) {
  uint8_t level = HIGH;
  pinMode(LED, OUTPUT);
  digitalWrite(LED, level);
  for (;;) {
    xSemaphoreTake(sem, portMAX_DELAY);
    Serial.println(level);
    digitalWrite(LED, level);
    if (level == LOW) {
      level = HIGH;
    } else {
      level = LOW;
    }
  }
}

void task_button(void *params) {
  pinMode(BUTTON, INPUT);
  for (;;) {
    if (digitalRead(BUTTON) == LOW) {
      while (digitalRead(BUTTON) == LOW) {
        vTaskDelay(100/portTICK_PERIOD_MS);
      }
      xSemaphoreGive(sem);
    }
    vTaskDelay(10/portTICK_PERIOD_MS);
  }
}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println("Boot");
  sem = xSemaphoreCreateBinary();
  xTaskCreatePinnedToCore(task_led, "LED", 1000, NULL, 1, NULL, xPortGetCoreID());
  xTaskCreatePinnedToCore(task_button, "BUTTON", 1000, NULL, 1, NULL, xPortGetCoreID());
}

void loop() {
  vTaskDelay(1000/portTICK_PERIOD_MS);
}
Loading
esp32-s3-devkitc-1