// void setup() {
// // put your setup code here, to run once:
// Serial.begin(115200);
// Serial.print("setup() is running on core ");
// Serial.println(xPortGetCoreID());
// }
// void loop() {
// Serial.print("loop() is running on core ");
// Serial.println(xPortGetCoreID());
// }
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#define LED_1 GPIO_NUM_5 // blue LED - task #1
#define LED_2 GPIO_NUM_18 // green LED - task #2
#define LED_3 GPIO_NUM_21 // orange LED - task #3
#define LED_4 GPIO_NUM_4 // purple LED - idle
void setup(){
Serial.begin(115200);
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
pinMode(LED_4, OUTPUT);
// Create 3 tasks with labels Task1, Task2 and Task3 and assign the priority as 1, 2 and 3 respectively.
// Create the fourth task labelled as IdleTask - when there is no task in operation and it has the highest priority.
xTaskCreate(MyTask1, "Task 1", 1000, NULL, 1, NULL);
xTaskCreate(MyTask2, "Task 2", 1000, NULL, 2, NULL);
xTaskCreate(MyTask3, "Task 3", 1000, NULL, 3, NULL);
xTaskCreate(MyIdleTask, "IdleTask", 1000, NULL, 4, NULL);
}
static void MyTask1(void * parameter) {
while (1) {
digitalWrite(LED_1,HIGH);
digitalWrite(LED_2,LOW);
digitalWrite(LED_3,LOW);
digitalWrite(LED_4,LOW);
vTaskDelay(100/portTICK_PERIOD_MS);
}
}
static void MyTask2(void * parameter) {
while (1) {
digitalWrite(LED_1,LOW);
digitalWrite(LED_2,HIGH);
digitalWrite(LED_3,LOW);
digitalWrite(LED_4,LOW);
vTaskDelay(120/portTICK_PERIOD_MS);
}
}
static void MyTask3(void * parameter) {
while (1) {
digitalWrite(LED_1,LOW);
digitalWrite(LED_2,LOW);
digitalWrite(LED_3,HIGH);
digitalWrite(LED_4,LOW);
vTaskDelay(140/portTICK_PERIOD_MS);
}
}
static void MyIdleTask(void * parameter) {
while (1) {
digitalWrite(LED_1,LOW);
digitalWrite(LED_2,LOW);
digitalWrite(LED_3,LOW);
digitalWrite(LED_4,HIGH);
Serial.println(F("Idle state"));
vTaskDelay(140/portTICK_PERIOD_MS);
//delay(50);
}
}
void loop() {
}