#include <Arduino_FreeRTOS.h>
#include <queue.h>
#define LED_PIN_8 8
#define LED_PIN_9 9
QueueHandle_t dataQueue;
void sendTask(void *pvParameters);
void receiveTask(void *pvParameters);
void setup() {
pinMode(LED_PIN_8, OUTPUT);
pinMode(LED_PIN_9, OUTPUT);
dataQueue = xQueueCreate(10, sizeof(int));
if (dataQueue == NULL) {
while (1);
}
xTaskCreate(sendTask, "Send Task", 128, NULL, 1, NULL);
xTaskCreate(receiveTask, "Receive Task", 128, NULL, 2, NULL);
}
void loop() {
}
void sendTask(void *pvParameters) {
int data = 0;
for (;;) {
xQueueSend(dataQueue, &data, portMAX_DELAY);
data = (data + 1) % 16;
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void receiveTask(void *pvParameters) {
int receivedData;
for (;;) {
if (xQueueReceive(dataQueue, &receivedData, 500 / portTICK_PERIOD_MS) == pdTRUE) {
if (receivedData >= 4 && receivedData <= 10) {
digitalWrite(LED_PIN_8, LOW);
digitalWrite(LED_PIN_9, HIGH);
} else {
digitalWrite(LED_PIN_8, HIGH);
digitalWrite(LED_PIN_9, LOW);
}
} else {
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
}