#include <Arduino.h>

// Definiciones de pines para los LEDs
const int pinLedRojo = 17;
const int pinLedAzul = 18;
const int pinLedVerde = 19;

// Tiempos de encendido y apagado en milisegundos
const int tiempoEncendidoRojo = 300;
const int tiempoApagadoRojo = 1000;
const int tiempoEncendidoAzul = 400;
const int tiempoApagadoAzul = 400;
const int tiempoEncendidoVerde = 2300;
const int tiempoApagadoVerde = 700;

// Prototipos de funciones para las tareas
void tareaLedRojo(void *pvParameters);
void tareaLedAzul(void *pvParameters);
void tareaLedVerde(void *pvParameters);

void setup() {
  // Inicializa los pines de los LEDs como salidas
  pinMode(pinLedRojo, OUTPUT);
  pinMode(pinLedAzul, OUTPUT);
  pinMode(pinLedVerde, OUTPUT);

  // Creación de las tareas para cada LED
  xTaskCreate(tareaLedRojo, "TareaLedRojo", 1000, NULL, 1, NULL);
  xTaskCreate(tareaLedAzul, "TareaLedAzul", 1000, NULL, 1, NULL);
  xTaskCreate(tareaLedVerde, "TareaLedVerde", 1000, NULL, 1, NULL);
}

void loop() {
  // En un programa con FreeRTOS, el loop puede quedar vacío.
}

// Tarea para controlar el LED rojo
void tareaLedRojo(void *pvParameters) {
  for (;;) {
    digitalWrite(pinLedRojo, HIGH); // Enciende el LED
    vTaskDelay(tiempoEncendidoRojo / portTICK_PERIOD_MS);
    digitalWrite(pinLedRojo, LOW);  // Apaga el LED
    vTaskDelay(tiempoApagadoRojo / portTICK_PERIOD_MS);
  }
}

// Tarea para controlar el LED azul
void tareaLedAzul(void *pvParameters) {
  for (;;) {
    digitalWrite(pinLedAzul, HIGH);
    vTaskDelay(tiempoEncendidoAzul / portTICK_PERIOD_MS);
    digitalWrite(pinLedAzul, LOW);
    vTaskDelay(tiempoApagadoAzul / portTICK_PERIOD_MS);
  }
}

// Tarea para controlar el LED verde
void tareaLedVerde(void *pvParameters) {
  for (;;) {
    digitalWrite(pinLedVerde, HIGH);
    vTaskDelay(tiempoEncendidoVerde / portTICK_PERIOD_MS);
    digitalWrite(pinLedVerde, LOW);
    vTaskDelay(tiempoApagadoVerde / portTICK_PERIOD_MS);
  }
}