#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include <Arduino.h>
#include "freertos/queue.h"
#define ledRed 4
#define ledBlue 5
int blinkingLED=0;
QueueHandle_t myQueue;
void setup(){
Serial.begin(9600);
// Set LED pins as output
pinMode(ledRed, OUTPUT);
pinMode(ledBlue, OUTPUT);
// Create a queue capable of containing 5 integers
myQueue = xQueueCreate(10, sizeof(int));
// Create sender and receiver tasks
xTaskCreate(&redBlink, "redBlink", 1024, NULL, 2, NULL);
xTaskCreate(&blueBlink, "blueBlink", 1024, NULL, 2, NULL);
xTaskCreate(&serialTask, "serialTask", 1024, NULL, 1, NULL);
}
// Serial task function
void serialTask(void * pvParameter){
while (1) {
// Display information about the blinking LED based on the global variable
if (blinkingLED == 0) {
Serial.println("Red LED is blinking");
} else {
Serial.println("Blue LED is blinking");
}
// Add suitable delay to avoid continuous serial communication
vTaskDelay(500/portTICK_PERIOD_MS); // Adjust the delay as needed
}
}
// Blink Blue LED
void blueBlink(void * pvParameter){
while (1) {
// Toggle the blue LED at 1 Hz
blinkingLED = 1; // Update the global variable
digitalWrite(ledBlue, HIGH);
vTaskDelay(500/portTICK_PERIOD_MS); // Delay for 500 ms (0.5 Hz)
digitalWrite(ledBlue, LOW);
vTaskDelay(500/portTICK_PERIOD_MS); // Delay for 500 ms (0.5 Hz)
}
}
// Blink Red LED
void redBlink(void * pvParameter){
while (1) {
// Toggle the red LED at 2.5 Hz
blinkingLED = 0; // Update the global variable
digitalWrite(ledRed, HIGH);
vTaskDelay(200/portTICK_PERIOD_MS); // Delay for 200 ms (2.5 Hz)
digitalWrite(ledRed, LOW);
vTaskDelay(200/portTICK_PERIOD_MS); // Delay for 200 ms (2.5 Hz)
}
}
void loop() {
}