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

TaskHandle_t Task1_Handle;
TaskHandle_t Task2_Handle;
TaskHandle_t Task3_Handle;

// Task 1
void Task1(void *pvParameters)
{
  while(1)
  {
    Serial.print("1");
    delay(1000);
    //vTaskDelay(pdMS_TO_TICKS(1000));
  }

  unsigned long t1, t2=millis();
  const unsigned long INTERVAL = 1000;
  t1=t2-INTERVAL;
  for (;;)
  {
    t2=millis();
    if(t2-t1>=INTERVAL)
    {
      Serial.println("Task 1 is running...");
      t1=t2;
    }
  }
}

// Task 2
void Task2(void *pvParameters)
{
  while(1)
  {
    Serial.print("2");
    delay(5000);
    //vTaskDelay(pdMS_TO_TICKS(1000));
  }

  unsigned long t1, t2=millis();
  const unsigned long INTERVAL = 2000;
  t1=t2-INTERVAL;
  for (;;)
  {
    t2=millis();
    if(t2-t1>=INTERVAL)
    {
      Serial.println("Task 2 is running...");
      t1=t2;
    }
    //vTaskDelay(pdMS_TO_TICKS(1500)); // Delay 1.5 detik
  }
}

// Task 3
void Task3(void *pvParameters)
{
  while(1)
  {
    Serial.print("3");
    delay(10000);
    //vTaskDelay(pdMS_TO_TICKS(1000));
  }

  unsigned long t1, t2=millis();
  const unsigned long INTERVAL = 3000;
  t1=t2-INTERVAL;
  for (;;)
  {
    t2=millis();
    if(t2-t1>=INTERVAL)
    {
      Serial.println("Task 3 is running...");
      t1=t2;
    }
  }
}

void setup() {
  Serial.begin(9600);

  xTaskCreate(Task1, "Task1", 1000, NULL, 5, &Task1_Handle);
  xTaskCreate(Task2, "Task2", 1000, NULL, 5, &Task2_Handle);
  xTaskCreate(Task3, "Task3", 1000, NULL, 5, &Task3_Handle);
}

void loop() {
  Serial.print("0");
  delay(500);
}
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK