#define led1 21
#define led2 19
#define led3 18
#define pot 34
// Variables para controlar el tiempo de parpadeo
int interval1 = 500; // Se ajustará según el potenciómetro
const int interval2 = 1000; // 1 segundo para el LED2
const int interval3 = 200; // 200 ms para el LED3
void setup() {
// Configurar los pines de los LEDs y el potenciómetro
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(pot, INPUT);
// Iniciar comunicación serial
Serial.begin(115200);
Serial.println("ESP32 Multicore LED Control");
// Crear tarea para controlar el LED2 en el núcleo 1
xTaskCreatePinnedToCore(
controlLed2, // Nombre de la función que ejecuta la tarea
"TaskLed2", // Nombre de la tarea
1000, // Tamaño del stack de la tarea
NULL, // Parámetros de entrada (no usados aquí)
1, // Prioridad de la tarea
NULL, // Manejo de la tarea (no usado aquí)
1 // Núcleo al que está asignada la tarea (Core 1)
);
// Crear tarea para controlar el LED3 en el núcleo 1
xTaskCreatePinnedToCore(
controlLed3, // Nombre de la función que ejecuta la tarea
"TaskLed3", // Nombre de la tarea
1000, // Tamaño del stack de la tarea
NULL, // Parámetros de entrada (no usados aquí)
1, // Prioridad de la tarea
NULL, // Manejo de la tarea (no usado aquí)
1 // Núcleo al que está asignada la tarea (Core 1)
);
}
void loop() {
// Esta parte del código se ejecuta en el núcleo 0
// Controlar el LED1 con el delay basado en el potenciómetro
int potValue = analogRead(pot); // Leer valor del potenciómetro
interval1 = map(potValue, 0, 4095, 100, 1000); // Mapear el valor del potenciómetro a un intervalo
digitalWrite(led1, HIGH);
delay(interval1);
digitalWrite(led1, LOW);
delay(interval1);
}
// Función para controlar el LED2 en el núcleo 1
void controlLed2(void * parameter) {
while (true) {
digitalWrite(led2, HIGH);
vTaskDelay(1000 / portTICK_PERIOD_MS); // Delay de 1 segundo
digitalWrite(led2, LOW);
vTaskDelay(1000 / portTICK_PERIOD_MS); // Delay de 1 segundo
}
}
// Función para controlar el LED3 en el núcleo 1
void controlLed3(void * parameter) {
while (true) {
digitalWrite(led3, HIGH);
vTaskDelay(200 / portTICK_PERIOD_MS); // Delay de 200 ms
digitalWrite(led3, LOW);
vTaskDelay(200 / portTICK_PERIOD_MS); // Delay de 200 ms
}
}