#include <Arduino_FreeRTOS.h> // Incluimos la librería de FreeRTOS.
const int ledPinCyan = 10;
const int ledPinLime = 11;
const int buttonPin = 7;
void ledControlTask(void *pvParameters) {
pinMode(ledPinLime, OUTPUT);
pinMode(ledPinCyan, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
while (1) {
if (digitalRead(buttonPin) == LOW) {
turnOnLimeLed();
turnOnCyanLed();
turnOffLimeLed();
turnOffCyanLed();
} else {
turnOffLimeLed();
turnOffCyanLed();
}
}
}
void turnOnLimeLed() {
digitalWrite(ledPinLime, HIGH);
vTaskDelay(800 / portTICK_PERIOD_MS);
}
void turnOffLimeLed() {
digitalWrite(ledPinLime, LOW);
vTaskDelay(800 / portTICK_PERIOD_MS);
}
void turnOnCyanLed() {
digitalWrite(ledPinCyan, HIGH);
vTaskDelay(200 / portTICK_PERIOD_MS);
}
void turnOffCyanLed() {
digitalWrite(ledPinCyan, LOW);
vTaskDelay(200 / portTICK_PERIOD_MS);
}
void printButtonTask(void *pvParameters) {
while (1) {
int buttonState = digitalRead(buttonPin);
Serial.print("Estado del botón: ");
Serial.println(buttonState == LOW ? "El boton esta presionado" : "El boton no esta presionado");
vTaskDelay(200 / portTICK_PERIOD_MS);
}
}
void setup()
{
Serial.begin(9600); // Inicializamos la comunicación serial a 9600 bps.
xTaskCreate(ledControlTask, // Tarea para controlar el LED.
"LED Control", // Nombre de la tarea.
128, // Tamaño del stack.
NULL, // Parámetros para la tarea (no hay en este caso).
1, // Prioridad de la tarea.
NULL); // Identificador de la tarea.
xTaskCreate(printButtonTask, // Tarea para imprimir el estado del botón.
"Print Button", // Nombre de la tarea.
128, // Tamaño del stack.
NULL, // Parámetros para la tarea.
1, // Prioridad de la tarea.
NULL); // Identificador de la tarea.
}
void loop()
{
// El loop principal queda vacío porque FreeRTOS maneja las tareas.
}