#include <Arduino_FreeRTOS.h>
#include <queue.h>
QueueHandle_t xQueue;
const int ledPin1 = 2;
const int ledPin2 = 3;
void Task1(void *params);
void Task2(void *params);
void setup() {
//Esta línea inicializa la comunicación serial en Arduino a una
//velocidad de transmisión de 9600 baudios.
Serial.begin(9600);
//En esta línea, se crea una cola (queue) en FreeRTOS utilizando
//la función xQueueCreate 10: Especifica el tamaño máximo de la cola
//sizeof(int): Indica el tamaño en bytes de cada elemento de la cola
xQueue = xQueueCreate(10, sizeof(int));
xTaskCreate(Task1, "Task1", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
xTaskCreate(Task2, "Task2", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
}
void loop() {
// Nothing to do here as all the work is done in the tasks
}
void Task1(void *params) {
while (1) {
int dataToSend = random(2); // Generates random numbers 0 or 1
//Esta línea envía un dato a la cola
xQueueSend(xQueue, &dataToSend, portMAX_DELAY);
// se utiliza para pausar la ejecución de la tarea actual durante un
//periodo de tiempo específico antes de continuar con las siguientes instrucciones.
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
void Task2(void *params) {
while (1) {
int receivedData;
if (xQueueReceive(xQueue, &receivedData, portMAX_DELAY) == pdPASS) {
if (receivedData == 0) {
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, LOW);
} else {
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
}
}
}
}