#include <Arduino_FreeRTOS.h>
#include <queue.h>
// Định nghĩa chân LED
#define LED_8 8
#define LED_9 9
// Khai báo hàng đợi
QueueHandle_t xQueue;
void TaskSend(void *pvParameters) {
(void) pvParameters;
int value = 0;
while (1) {
value = random(1, 15); // Tạo giá trị ngẫu nhiên từ 1 đến 14
xQueueSend(xQueue, &value, portMAX_DELAY);
vTaskDelay(pdMS_TO_TICKS(1000)); // Gửi giá trị mỗi giây
}
}
void TaskReceive(void *pvParameters) {
(void) pvParameters;
int receivedValue;
while (1) {
if (xQueueReceive(xQueue, &receivedValue, pdMS_TO_TICKS(1000)) == pdTRUE) {
if (receivedValue >= 4 && receivedValue <= 10) {
digitalWrite(LED_8, LOW);
digitalWrite(LED_9, HIGH);
} else {
digitalWrite(LED_8, HIGH);
digitalWrite(LED_9, LOW);
}
}
vTaskDelay(pdMS_TO_TICKS(500)); // Nhận dữ liệu mỗi 500ms
}
}
void setup() {
Serial.begin(9600);
pinMode(LED_8, OUTPUT);
pinMode(LED_9, OUTPUT);
digitalWrite(LED_8, HIGH);
digitalWrite(LED_9, LOW);
xQueue = xQueueCreate(5, sizeof(int)); // Tạo hàng đợi chứa tối đa 5 giá trị
if (xQueue != NULL) {
xTaskCreate(TaskSend, "Task Send", 128, NULL, 1, NULL);
xTaskCreate(TaskReceive, "Task Receive", 128, NULL, 1, NULL);
}
}
void loop() {
// Không cần code trong loop vì sử dụng FreeRTOS
}