TaskHandle_t task1Handle;
TaskHandle_t task2Handle;
TaskHandle_t task3Handle;

void setup() {
  Serial.begin(9600);
  Serial.println(F("In Setup function"));

  pinMode(13, OUTPUT); 
  pinMode(12, OUTPUT); 
  pinMode(14, OUTPUT);

  xTaskCreate(MyTask1, "Task1", 1000, NULL, 1, &task1Handle);
  xTaskCreate(MyTask2, "Task2", 1000, NULL, 2, &task2Handle); 
  xTaskCreate(MyTask3, "Task3", 1000, NULL, 3, &task3Handle);
  xTaskCreate(MyIdleTask, "IdleTask", 1000, NULL, 0, NULL); 
  xTaskCreate(TaskController, "TaskController", 1000, NULL, 4, NULL); // Higher priority
}

void loop() {
  // Empty - Task scheduling is handled in the FreeRTOS tasks
}

static void MyTask1(void* pvParameters) {
  while (1) {
    digitalWrite(13, HIGH);
    digitalWrite(12, LOW);
digitalWrite(14, LOW);
    Serial.println("Task1 is running");
    vTaskDelay(2100 / portTICK_PERIOD_MS);
  }
}

static void MyTask2(void* pvParameters) {
  while (1) {
    digitalWrite(13, LOW);
    digitalWrite(12, HIGH);
    digitalWrite(14, LOW);
    Serial.println("Task2 is running");
    vTaskDelay(2000 / portTICK_PERIOD_MS);
  }
}

static void MyTask3(void* pvParameters) {
  while (1) {
    digitalWrite(13, LOW);
    digitalWrite(12, LOW);
    digitalWrite(14, HIGH);
    Serial.println("Task3 is running");
    vTaskDelay(2005 / portTICK_PERIOD_MS);
  }
}

static void MyIdleTask(void* pvParameters) {
  while (1) {
    digitalWrite(13, LOW);
    digitalWrite(12, LOW);
    digitalWrite(14, LOW);
    Serial.println("IdleTask is running");
    vTaskDelay(500 / portTICK_PERIOD_MS);
  }
}

static void TaskController(void* pvParameters) {
  while (1) {
    // Wait for 10 seconds before suspending Task1
    vTaskDelay(10000 / portTICK_PERIOD_MS);
    Serial.println("Suspending Task1");
    vTaskSuspend(task1Handle);
    // Wait for an additional 5 seconds before resuming Task1
    vTaskDelay(5000 / portTICK_PERIOD_MS);
    Serial.println("Resuming Task1");
    vTaskResume(task1Handle);




    vTaskDelay(10000 / portTICK_PERIOD_MS);
    Serial.println("Suspending Task2");
    vTaskSuspend(task2Handle);
    // Wait for an additional 5 seconds before resuming Task1
    vTaskDelay(5000 / portTICK_PERIOD_MS);
    Serial.println("Resuming Task2");
    vTaskResume(task2Handle);




     vTaskDelay(10000 / portTICK_PERIOD_MS);
    Serial.println("Suspending Task3");
    vTaskSuspend(task3Handle);
    // Wait for an additional 5 seconds before resuming Task1
    vTaskDelay(5000 / portTICK_PERIOD_MS);
    Serial.println("Resuming Task3");
    vTaskResume(task3Handle);
  }
}
$abcdeabcde151015202530fghijfghij