#include <Arduino_FreeRTOS.h>
#include <queue.h>
#define LED1 8
#define LED2 9
QueueHandle_t xQueue;
void setup()
{
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
digitalWrite(LED1, HIGH); // Turn on LED1
digitalWrite(LED2, LOW); // Turn off LED2
Serial.begin(9600);
xQueue = xQueueCreate( 5, sizeof( long ) );
if( xQueue != NULL )
{
xTaskCreate( vSenderTask, "Sender", 240, NULL, 1, NULL );
xTaskCreate( vReceiverTask, "Receiver", 240, NULL, 2, NULL );
vTaskStartScheduler();
}
else
{
/* The queue could not be created. */
}
}
void loop()
{
// put your main code here, to run repeatedly:
}
void vSenderTask( void *pvParameters )
{
long lValueToSend = 0;
for( ;; )
{
lValueToSend++;
xQueueSend( xQueue, &lValueToSend, portMAX_DELAY );
Serial.print( "Sent = ");
Serial.println(lValueToSend);
vTaskDelay(1000 / portTICK_PERIOD_MS); // Delay for 1 second
}
}
void vReceiverTask( void *pvParameters )
{
long lReceivedValue;
for( ;; )
{
if (xQueueReceive( xQueue, &lReceivedValue, 500 / portTICK_PERIOD_MS ) == pdPASS)
{
Serial.print( "Received = ");
Serial.println(lReceivedValue);
if(lReceivedValue >= 4 && lReceivedValue <= 10)
{
digitalWrite(LED1, LOW); // Turn off LED1
digitalWrite(LED2, HIGH); // Turn on LED2
}
else
{
digitalWrite(LED1, HIGH); // Turn on LED1
digitalWrite(LED2, LOW); // Turn off LED2
}
}
else
{
vTaskDelay(1000 / portTICK_PERIOD_MS); // Delay for 1 second if no value received
}
}
}