Last active
March 17, 2022 17:45
-
-
Save SammyOina/fffc5efe0ff1f8db5dd071823a005e8c to your computer and use it in GitHub Desktop.
intro to free rtos gdsc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
int button = 5; | |
void setup() | |
//Initialize the Serial Monitor with 9600 baud rate | |
{ | |
Serial.begin(9600); | |
Serial.println(F("In Setup function")); | |
//Set the digital pins 8 to 11 as digital output pins | |
pinMode(8,OUTPUT); | |
pinMode(9,OUTPUT); | |
pinMode(10,OUTPUT); | |
pinMode(11,OUTPUT); | |
pinMode(button, INPUT); | |
//Create three tasks with labels Task1, Task2 and Task3 and assign the priority as 1, 2 and 3 respectively. | |
//We also create the fourth task labeled as IdelTask when there is no task in | |
//operation and it has the highest priority. | |
xTaskCreate(MyTask1, "Task1", 100, NULL, 1, NULL); | |
xTaskCreate(MyTask2, "Task2", 100, NULL, 2, NULL); | |
xTaskCreate(MyTask3, "Task3", 100, NULL, 3, NULL); | |
xTaskCreate(MyIdleTask, "IdleTask", 100, NULL, 0, NULL); | |
xTaskCreate(PollButton, "PollButton", 100, NULL, 1, NULL); | |
} | |
//We can change the priority of task according to our desire by changing the numeric’s //between NULL texts. | |
void loop() | |
{ | |
//There is no instruction in the loop section of the code. | |
// Because each task executes on interrupt after specified time | |
} | |
//The following function is Task1. We display the task label on Serial monitor. | |
static void PollButton(void* pvParameters){ | |
while(1) { | |
if(digitalRead(button) == HIGH) { | |
Serial.println("button pressed"); | |
// do some other things here when the condition is true | |
} | |
} | |
} | |
static void MyTask1(void* pvParameters) | |
{ | |
while(1) | |
{ | |
digitalWrite(8,HIGH); | |
digitalWrite(9,LOW); | |
digitalWrite(10,LOW); | |
digitalWrite(11,LOW); | |
Serial.println(F("Task1")); | |
vTaskDelay(100/portTICK_PERIOD_MS); | |
} | |
} | |
//Similarly this is task 2 | |
static void MyTask2(void* pvParameters) | |
{ | |
while(1) | |
{ digitalWrite(8,LOW); | |
digitalWrite(9,HIGH); | |
digitalWrite(10,LOW); | |
digitalWrite(11,LOW); | |
Serial.println(F("Task2")); | |
vTaskDelay(110/portTICK_PERIOD_MS); | |
} | |
} | |
//Similarly this is task 3 | |
static void MyTask3(void* pvParameters) | |
{ | |
while(1) | |
{ | |
digitalWrite(8,LOW); | |
digitalWrite(9,LOW); | |
digitalWrite(10,HIGH); | |
digitalWrite(11,LOW); | |
Serial.println(F("Task3")); | |
vTaskDelay(120/portTICK_PERIOD_MS); | |
} | |
} | |
//This is the idle task which has the lowest priority and calls when no task is running. | |
static void MyIdleTask(void* pvParameters) | |
{ | |
while(1) | |
{ | |
digitalWrite(8,LOW); | |
digitalWrite(9,LOW); | |
digitalWrite(10,LOW); | |
digitalWrite(11,HIGH); | |
Serial.println(F("Idle state")); | |
delay(50); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment