#include <Arduino_FreeRTOS.h>
// Khai báo các nhiệm vụ (task) sẽ thực thi
void TaskBlink1(void* pvParameters); // Tác vụ 1: Nhấp nháy LED trên chân 13
void TaskBlink2(void* pvParameters); // Tác vụ 2: Nhấp nháy LED trên chân 7
void Taskprint(void* pvParameters); // Tác vụ 3: In giá trị bộ đếm ra Serial
void setup() {
Serial.begin(9600);// Khởi tạo giao tiếp Serial với tốc độ baud 9600.
// Thiết lập các tác vụ để chạy độc lập trong FreeRTOS
xTaskCreate(
TaskBlink1, // Hàm nhiệm vụ
"Task1", // Tên nhiệm vụ (chỉ để dễ nhận biết)
128, // Kích thước stack cho nhiệm vụ (byte)
NULL, // Tham số truyền vào nhiệm vụ (ở đây không có)
1, // Độ ưu tiên của nhiệm vụ (càng cao thì nhiệm vụ càng được ưu tiên)
NULL // Handle của nhiệm vụ (không cần lưu trữ handle trong trường hợp này)
);
xTaskCreate(
TaskBlink2,
"Task2",
128,
NULL,
1, // Độ ưu tiên bằng 1 (giống TaskBlink1)
NULL
);
xTaskCreate(
Taskprint,
"Task3",
128,
NULL,
1, // Độ ưu tiên bằng 1 (giống các task khác)
NULL
);
vTaskStartScheduler(); // Bắt đầu trình quản lý tác vụ FreeRTOS.
}
void loop() {
// Hàm loop() không được sử dụng vì các task đang được quản lý bởi FreeRTOS.
}
void TaskBlink1(void* pvParameters) // Tác vụ 1: Điều khiển LED trên chân 13
{
pinMode(13, OUTPUT); // Thiết lập chân 13 làm đầu ra.
while (1) {
Serial.println("Task1"); // In "Task1" ra cổng Serial để xác nhận task đang chạy.
digitalWrite(13, HIGH); // Bật LED trên chân 13.
vTaskDelay(200 / portTICK_PERIOD_MS); // Trì hoãn 200ms.
digitalWrite(13, LOW); // Tắt LED trên chân 13.
vTaskDelay(200 / portTICK_PERIOD_MS); // Trì hoãn 200ms.
}
}
void TaskBlink2(void* pvParameters) // Tác vụ 2: Điều khiển LED trên chân 7
{
pinMode(7, OUTPUT); // Thiết lập chân 7 làm đầu ra.
while (1) {
Serial.println("Task2"); // In "Task2" ra cổng Serial để xác nhận task đang chạy.
digitalWrite(7, HIGH); // Bật LED trên chân 7.
vTaskDelay(300 / portTICK_PERIOD_MS); // Trì hoãn 300ms.
digitalWrite(7, LOW); // Tắt LED trên chân 7.
vTaskDelay(300 / portTICK_PERIOD_MS); // Trì hoãn 300ms.
}
}
void Taskprint(void* pvParameters) // Tác vụ 3: In giá trị bộ đếm
{
int counter = 0; // Khởi tạo biến đếm.
while (1) {
counter++; // Tăng giá trị bộ đếm.
Serial.println(counter); // In giá trị hiện tại của bộ đếm ra cổng Serial.
vTaskDelay(500 / portTICK_PERIOD_MS); // Trì hoãn 500ms.
}
}