#include <Arduino_FreeRTOS.h>
// Function Declarations
void Task1(void* pvParameters);
void Task2(void* pvParameters);
void Task3(void* pvParameters);
// LED Pins
const int LED1 = 13;
const int LED2 = 9;
const int LED3 = 7;
void setup()
{
Serial.begin(9600);
Serial.println(F("Starting FreeRTOS Multi-Tasking Example"));
// Initialize LEDs
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
// Create Tasks
xTaskCreate(Task1, "LED Task1", 120, NULL, 1, NULL);
xTaskCreate(Task2, "LED Task2", 100, NULL, 1, NULL);
xTaskCreate(Task3, "LED Task3", 100, NULL, 1, NULL);
}
void loop()
{
// FreeRTOS handles everything; loop is not used.
}
// Task 1: LED1 ON, others OFF
void Task1(void* pvParameters)
{
while(1)
{
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
Serial.println(F("Task1 is running"));
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
// Task 2: LED2 ON, others OFF
void Task2(void* pvParameters)
{
while(1)
{
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
Serial.println(F("Task2 is running"));
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
// Task 3: LED1 & LED3 ON, LED2 OFF
void Task3(void* pvParameters)
{
while(1)
{
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
vTaskDelay(500 / portTICK_PERIOD_MS);
Serial.println(F("Task3 is running"));
digitalWrite(LED3, LOW);
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}