#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);
}
}