#include <Arduino_FreeRTOS.h>
// Định nghĩa các chân LED
const int LED1_PIN = 13; // LED1 trên chân 13
const int LED2_PIN = 12; // LED2 trên chân 12
// Khai báo các task handle
TaskHandle_t Task1Handle = NULL;
TaskHandle_t Task2Handle = NULL;
// Hàm của Task1: Nháy LED1 mỗi 1000ms
void Task1(void *pvParameters) {
(void) pvParameters;
pinMode(LED1_PIN, OUTPUT);
while (1) {
digitalWrite(LED1_PIN, HIGH);
vTaskDelay(500 / portTICK_PERIOD_MS);
digitalWrite(LED1_PIN, LOW);
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
// Hàm của Task2: Nháy LED2 mỗi 300ms, sau 10 lần thì xoá Task1 và tự xoá chính nó
void Task2(void *pvParameters) {
(void) pvParameters;
pinMode(LED2_PIN, OUTPUT);
int blinkCount = 0;
while (blinkCount < 10) {
digitalWrite(LED2_PIN, HIGH);
vTaskDelay(150 / portTICK_PERIOD_MS);
digitalWrite(LED2_PIN, LOW);
vTaskDelay(150 / portTICK_PERIOD_MS);
blinkCount++;
}
// Xoá Task1
if (Task1Handle != NULL) {
vTaskDelete(Task1Handle);
}
// Xoá chính Task2
vTaskDelete(NULL);
}
void setup() {
// Tạo các task
xTaskCreate(Task1, "Task1", 128, NULL, 1, &Task1Handle);
xTaskCreate(Task2, "Task2", 128, NULL, 1, &Task2Handle);
}
void loop() {
// Không cần làm gì trong loop
}