#include <Arduino_FreeRTOS.h>

// Định nghĩa chân LED
#define LED_PIN 10

// Định nghĩa handle cho task
TaskHandle_t BlinkTaskHandle;

// Task để bật/tắt LED
void BlinkTask(void *pvParameters) {
  (void) pvParameters;

  // Thiết lập chân LED là OUTPUT
  pinMode(LED_PIN, OUTPUT);

  while (1) {
    digitalWrite(LED_PIN, HIGH);   // Bật LED
    vTaskDelay(1000 / portTICK_PERIOD_MS); // Chờ 1 giây

    digitalWrite(LED_PIN, LOW);    // Tắt LED
    vTaskDelay(1000 / portTICK_PERIOD_MS); // Chờ 1 giây
  }
}

void setup() {
  // Khởi tạo Serial Monitor
  Serial.begin(9600);
  Serial.println("FreeRTOS Blink LED Task Started");

  // Tạo task BlinkTask với mức ưu tiên tskIDLE_PRIORITY + 1
  xTaskCreate(
    BlinkTask,            // Hàm nhiệm vụ
    "BlinkTask",          // Tên nhiệm vụ (để debug)
    128,                  // Kích thước ngăn xếp (stack)
    NULL,                 // Tham số nhiệm vụ
    tskIDLE_PRIORITY + 1, // Độ ưu tiên của nhiệm vụ
    &BlinkTaskHandle      // Handle nhiệm vụ
  );

  // Bắt đầu scheduler của FreeRTOS
  vTaskStartScheduler();
}

void loop() {
  // Không cần làm gì trong hàm loop
}