#include <Arduino.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#define ledPin_Blue 2
#define ledPin_Red 3
bool redLedStatus = LOW; // setting the status intially as low
bool blueLedStatus = LOW;
bool printedREDStatus = LOW;
bool printedBLUEStatus = LOW;
void setup() {
Serial.begin(115200);
pinMode(ledPin_Blue, OUTPUT);
pinMode(ledPin_Red, OUTPUT);
xTaskCreate(&blinkRED, "blinkRED", 4000, NULL, 2, NULL); // task creation for red blinking led
xTaskCreate(&blinkBLUE, "blinkBLUE", 4000, NULL, 2, NULL); // task creation for blue blinking led
xTaskCreate(&display, "display", 10000, NULL, 1, NULL); // task creation for displaying status
}
void blinkRED (void * pvParameters){ // function to call for red led blink
for(;;){
redLedStatus = !redLedStatus; // inverting the declared led status
digitalWrite(ledPin_Red,redLedStatus);
vTaskDelay(400/portTICK_PERIOD_MS); // 2.5hz delay
if (redLedStatus == HIGH){ // preventing the serial from printing continuously
printedREDStatus = false;
}
}
}
void blinkBLUE (void * pvParameters){ // function to call for blue led blink
for(;;){
blueLedStatus = !blueLedStatus;
digitalWrite(ledPin_Blue,blueLedStatus);
vTaskDelay(1000/portTICK_PERIOD_MS); // 1hz delay
if (blueLedStatus == HIGH){ // preventing the serial from printing continuously
printedBLUEStatus = false;
}
}
}
void display (void * pvParameters){ // function to display the led status
for(;;){
if (redLedStatus == HIGH && !printedREDStatus){
Serial.println("RED LED ON"); // printing status in serial if red is on
printedREDStatus = true;
}
if (blueLedStatus == HIGH && !printedBLUEStatus){
Serial.println("BLUE LED ON"); // printing status in serial if blue is on
printedBLUEStatus = true;
}
}
}
void loop(){}
/*
3 task
1st task - red led blinking (2.5hz) priority 2 (400)
2nd Task Blue Blink 1hz priority 2 (1000)
3rd Task Serial Task (LED IS ON, BLUE IS ON) (queue/semaphore)
include comments
instructions
*/