#include <Arduino.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>

// Define the LED pins
#define LED1_PIN 4
#define LED2_PIN 5

// Define the task handles
TaskHandle_t Task1Handle = NULL;
TaskHandle_t Task2Handle = NULL;

// Task 1 function
void Task1(void *parameter) {
  pinMode(LED1_PIN, OUTPUT);

  while (1) {
    digitalWrite(LED1_PIN, HIGH);
    vTaskDelay(500 / portTICK_PERIOD_MS);
    digitalWrite(LED1_PIN, LOW);
    vTaskDelay(500 / portTICK_PERIOD_MS);
  }
}

// Task 2 function
void Task2(void *parameter) {
  pinMode(LED2_PIN, OUTPUT);

  while (1) {
    digitalWrite(LED2_PIN, HIGH);
    vTaskDelay(1000 / portTICK_PERIOD_MS);
    digitalWrite(LED2_PIN, LOW);
    vTaskDelay(1000 / portTICK_PERIOD_MS);
  }
}

void setup() {
  // Create Task 1
  xTaskCreatePinnedToCore(
      Task1,              // Task function
      "Task1",            // Task name
      10000,              // Stack size
      NULL,               // Task parameter
      1,                  // Task priority
      &Task1Handle,       // Task handle
      0                   // Run on core 0
  );

  // Create Task 2
  xTaskCreatePinnedToCore(
      Task2,              // Task function
      "Task2",            // Task name
      10000,              // Stack size
      NULL,               // Task parameter
      1,                  // Task priority
      &Task2Handle,       // Task handle
      1                   // Run on core 1
  );
}

void loop() {
  // Empty loop
}