/*
Author: Alejandro Daniel Rodriguez Pijuan
Date: 10/11/2023
Description: ejemplo_multicore
*/
#define LEDR_PIN 16 // LED rojo conectado a GPIO16
#define LEDV_PIN 17 // LED verde conectado a GPIO17
#define LEDA_PIN 18 // LED azul conectado a GPIO18
volatile bool botonVerdePulsado = 0;
volatile bool botonRojoPulsado = 0;
TaskHandle_t HandleTask1; // Handle de la tarea 1
TaskHandle_t HandleTask2; // Handle de la tarea 2
TaskHandle_t HandleTask3; // Handle de la tarea 3
void setup()
{
Serial.begin(115200); // Inicialización puerto serie
pinMode(LEDR_PIN, OUTPUT);
pinMode(LEDV_PIN, OUTPUT);
pinMode(LEDA_PIN, OUTPUT);
// Creamos la Tarea 1:
xTaskCreatePinnedToCore(
EncenderLedRojo, // Nombre de la función en la que se implementa la tarea
"Encender Led Rojo", // Descripción de la tarea
2048, // Memoria (en Bytes) asignados a esta tarea (no poner muy alta)
NULL, // Parámetro de entrada de la tarea (no hay ningún parámetro)
0, // Prioridad de la tarea (cuanto más alto, más prioridad. No interesa por ahora, sólo cuando haya varias tareas en un mismo core)
&HandleTask1, // Handle (manejador) de la tarea 1.
0); // Core donde va a correr la tarea 1 (Puede ser core 0 o core 1)
// Creamos la Tarea 2:
xTaskCreatePinnedToCore(
EncenderLedVerde,
"Encender Led Verde",
2048,
NULL,
0,
&HandleTask2,
1);
// Creamos la Tarea 3:
xTaskCreatePinnedToCore(
EncenderLedAzul,
"Encender Led Verde",
2048,
NULL,
0,
&HandleTask3,
1);
}
void loop()
{
delay(10); // Poner un delay pequeño en el loop para que no caiga el rendimiento en wokwi
}
void EncenderLedRojo(void *parameter) //CORE 0
{
while (1)
{
Serial.print("Core: ");
Serial.println(xPortGetCoreID());
digitalWrite(LEDR_PIN, !digitalRead(LEDR_PIN));
delay(10); // Loop cada 500ms => 2Hz
}
}
void EncenderLedVerde(void *parameter) //CORE 1
{
while (1)
{
Serial.print("Core: ");
Serial.println(xPortGetCoreID());
digitalWrite(LEDV_PIN, !digitalRead(LEDV_PIN));
delay(10); // Loop cada 500ms => 2Hz
}
}
void EncenderLedAzul(void *parameter) //CORE 1
{
while (1)
{
Serial.print("Core: ");
Serial.println(xPortGetCoreID());
digitalWrite(LEDA_PIN, !digitalRead(LEDA_PIN));
delay(10); // Loop cada 500ms => 2Hz
}
}