#include <Arduino_FreeRTOS.h>
#include <queue.h>

QueueHandle_t xQueue;

void setup() {
  Serial.begin(9600);

  // Tạo một hàng đợi để chứa 5 số nguyên
  xQueue = xQueueCreate(5, sizeof(int));

  if (xQueue != NULL) {
    xTaskCreate(vSenderTask, "Sender", 128, NULL, 1, NULL);
    xTaskCreate(vReceiverTask, "Receiver", 128, NULL, 1, NULL);
  }
}

void loop() {
  // Không sử dụng loop() trong FreeRTOS
}

void vSenderTask(void *pvParameters) {
  int i = 0;

  while (1) {
    // Gửi dữ liệu vào hàng đợi
    xQueueSend(xQueue, &i, portMAX_DELAY);
    Serial.print("Sent: ");
    Serial.println(i);
    i++;
    vTaskDelay(1000 / portTICK_PERIOD_MS); // Chờ 1 giây
  }
}

void vReceiverTask(void *pvParameters) {
  int rxInt;

  while (1) {
    // Nhận dữ liệu từ hàng đợi
    xQueueReceive(xQueue, &rxInt, portMAX_DELAY);
    Serial.print("Received: ");
    Serial.println(rxInt);
  }
}