/**************************************************************************
Manuel Córdoba Ramos
En este ejercicio se pide realizar un programa con 3 tareas.
- La tarea 1 hace parpadear el led rojo cada medio segundo (0,5s) [Core 0]
- La tarea 2 el led azul cada segundo (1s) [Core 1]
- La tarea 3 el verde cada dos segundos (2s) [Core 1]
***************************************************************************/
#define pinLedRed 2
#define pinLedGreen 4
#define pinLedBlue 16
TaskHandle_t handleTask1; // Definir Handle de la tarea 1
TaskHandle_t handleTask2; // Definir Handle de la tarea 2
TaskHandle_t handleTask3; // Definir Handle de la tarea 3
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32!");
Serial.println(portTICK_PERIOD_MS);
pinMode(pinLedRed, OUTPUT);
pinMode(pinLedGreen, OUTPUT);
pinMode(pinLedBlue, OUTPUT);
digitalWrite(pinLedRed, LOW);
digitalWrite(pinLedGreen, LOW);
digitalWrite(pinLedBlue, LOW);
// Creamos la Tarea 1
xTaskCreatePinnedToCore(
RedThread, // Nombre de la función en la que se implementa la tarea
"Manejar el 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 (definido arriba)
0); // Core donde va a correr la tarea (Puede ser core 0 o core 1)
// Creamos la Tarea 2
xTaskCreatePinnedToCore(
BlueThread, // Nombre de la función en la que se implementa la tarea
"Manejar el led azul", // 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)
&handleTask2, // Handle (manejador) de la tarea (definido arriba)
1); // Core donde va a correr la tarea (Puede ser core 0 o core 1)
// Creamos la Tarea 3
xTaskCreatePinnedToCore(
GreenThread, // Nombre de la función en la que se implementa la tarea
"Manejar el led verde", // 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)
&handleTask3, // Handle (manejador) de la tarea (definido arriba)
1); // Core donde va a correr la tarea (Puede ser core 0 o core 1)
}
void loop() {
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
}
void RedThread (void *parameter) {
while (1) {
digitalWrite(pinLedRed, !digitalRead(pinLedRed));
delay(500);
}
}
void BlueThread (void *parameter) {
while (1) {
digitalWrite(pinLedBlue, !digitalRead(pinLedBlue));
delay(1000);
}
}
void GreenThread (void *parameter) {
while (1) {
digitalWrite(pinLedGreen, !digitalRead(pinLedGreen));
delay(2000);
}
}