#include <Arduino_FreeRTOS.h>
// Handler
TaskHandle_t White_Handler;
TaskHandle_t Aqua_Handler;
TaskHandle_t Blue_Handler;
TaskHandle_t Pink_Handler;
TaskHandle_t Red_Handler;
TaskHandle_t Purple_Handler;
// pinNumber
int whitePin = 11;
int aquaPin = 10;
int bluePin = 9;
int pinkPin = 6;
int redPin = 5;
int purplePin = 3;
// Function
void LEDon(int Pin);
void LEDoff(int Pin);
// Tasks
void WhiteLED(void* arg);
void AquaLED(void* arg);
void BlueLED(void* arg);
void PinkLED(void* arg);
void RedLED(void* arg);
void PurpleLED(void* arg);
void setup() {
pinMode(whitePin, OUTPUT);
pinMode(aquaPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(pinkPin, OUTPUT);
pinMode(redPin, OUTPUT);
pinMode(purplePin, OUTPUT);
// Create tasks
xTaskCreate(WhiteLED, "White", 128, NULL, 1, &White_Handler);
xTaskCreate(AquaLED, "Aqua", 128, NULL, 1, &Aqua_Handler);
xTaskCreate(BlueLED, "Blue", 128, NULL, 1, &Blue_Handler);
xTaskCreate(PinkLED, "Pink", 128, NULL, 1, &Pink_Handler);
xTaskCreate(RedLED, "Red", 128, NULL, 1, &Red_Handler);
xTaskCreate(PurpleLED, "Purple", 128, NULL, 1, &Purple_Handler);
vTaskStartScheduler();
// get seed from A0Pin
int seed = analogRead(A0);
randomSeed(seed);
// LEDon
LEDon(whitePin);
LEDon(aquaPin);
LEDon(bluePin);
LEDon(pinkPin);
LEDon(redPin);
LEDon(purplePin);
delay(500);
}
//Tasks
void WhiteLED(void* arg) {
vTaskDelay(random(1, 1001) / portTICK_PERIOD_MS); // wait randam time
LEDoff(whitePin);
vTaskDelay(random(1, 1001) / portTICK_PERIOD_MS); // wait a minute
LEDon(whitePin);
}
void AquaLED(void* arg) {
vTaskDelay(random(1, 1001) / portTICK_PERIOD_MS); // wait randam time
LEDoff(aquaPin);
vTaskDelay(random(1, 1001) / portTICK_PERIOD_MS); // wait a minute
LEDon(aquaPin);
}
void BlueLED(void* arg) {
vTaskDelay(random(1, 1001) / portTICK_PERIOD_MS); // wait randam time
LEDoff(bluePin);
vTaskDelay(random(1, 1001) / portTICK_PERIOD_MS); // wait a minute
LEDon(bluePin);
}
void PinkLED(void* arg) {
vTaskDelay(random(1, 1001) / portTICK_PERIOD_MS); // wait a minute
LEDoff(pinkPin);
vTaskDelay(random(1, 1001) / portTICK_PERIOD_MS); // wait a minute
LEDon(pinkPin);
}
void RedLED(void* arg) {
LEDoff(redPin);
vTaskDelay(random(1, 1001) / portTICK_PERIOD_MS); // wait a minute vTaskDelay(30 / portTICK_PERIOD_MS); // wait randam time
LEDon(redPin);
vTaskDelay(random(1, 1001) / portTICK_PERIOD_MS); // wait a minute vTaskDelay(30 / portTICK_PERIOD_MS); // wait randam time
}
void PurpleLED(void* arg) {
LEDoff(purplePin);
vTaskDelay(random(1, 1001) / portTICK_PERIOD_MS); // wait a minute vTaskDelay(30 / portTICK_PERIOD_MS); // wait randam time
LEDon(purplePin);
vTaskDelay(random(1, 1001) / portTICK_PERIOD_MS); // wait a minute vTaskDelay(30 / portTICK_PERIOD_MS); // wait randam time
}
// Function
void LEDon(int Pin) {
for(int i = 0; i <= 255; i += 15) {
analogWrite(Pin, i);
vTaskDelay(50 / portTICK_PERIOD_MS); // wait a minute
}
}
void LEDoff(int Pin) {
for(int i = 255; i >= 15; i -= 15) {
analogWrite(Pin, i);
vTaskDelay(50 / portTICK_PERIOD_MS); // wait a minute
}
}
void loop() {
}