// Projeto envolvendo 3 LEDs com comportamentos diferentes utilizando FreeRTOS
#include <Arduino.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
const int ledFadeIn = 25; // LED para fade-in no pino 25
const int ledBlink = 33; // LED para blink no pino 33
const int ledOnOff = 32; // LED para ligar/desligar no pino 32
void vExecutaFadeNoLed(void *parameter) {
int fadeValue = 0;
while (true) {
for (int fadeValue = 1; fadeValue <= 255; fadeValue++) {
analogWrite(ledFadeIn, fadeValue);
vTaskDelay(pdMS_TO_TICKS(30));
}
for (int fadeValue = 255; fadeValue >= 0; fadeValue--) {
analogWrite(ledFadeIn, fadeValue);
vTaskDelay(pdMS_TO_TICKS(30));
}
}
}
void vExecutaBlink(void *parameter) {
while (true) {
digitalWrite(ledBlink, HIGH);
vTaskDelay(pdMS_TO_TICKS(10));
digitalWrite(ledBlink, LOW);
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
void vExecutaOnOff(void *parameter) {
while (true) {
digitalWrite(ledOnOff, HIGH);
vTaskDelay(pdMS_TO_TICKS(5000));
digitalWrite(ledOnOff, LOW);
vTaskDelay(pdMS_TO_TICKS(5000));
}
}
void setup() {
pinMode(ledFadeIn, OUTPUT);
pinMode(ledBlink, OUTPUT);
pinMode(ledOnOff, OUTPUT);
xTaskCreate(vExecutaFadeNoLed, "Tarefa 1", 1000, NULL, 1, NULL);
xTaskCreate(vExecutaBlink, "Tarefa 2", 1000, NULL, 1, NULL);
xTaskCreate(vExecutaOnOff, "Tarefa 3", 1000, NULL, 1, NULL);
}
void loop() {
// O loop principal não faz nada, pois as tarefas são gerenciadas pelo FreeRTOS
}