// Menyertakan Library yang dibutuhkan
#include <Arduino_FreeRTOS.h>
void Task1( void *pvParameters );
void Task2( void *pvParameters );
TaskHandle_t TaskHandle_1; // handler for Task1
TaskHandle_t TaskHandle_2; // handler for Task2
// LED pins
const int LED1 = 10;
const int LED2 = 11;
// Task 1, dimmer LED 2 dengan frekuensi 100ms
void Task1( void * pvParameters ) {
UBaseType_t uxPriority = uxTaskPriorityGet( NULL ); //Mendapatkan header untuk priority Task 1
while(1)
{
Serial.println("Task1 is running and about to raise Task2 Priority"); //ketika Task 1 mendapat High maka akan ditampilan di serial monitor
vTaskPrioritySet( TaskHandle_2, ( uxPriority + 1 ) ); //merubah kondisi initial priority dari Task1 (menambah 1)
// Dim LED 1
digitalWrite(LED1, HIGH);
vTaskDelay(10);
digitalWrite(LED1, LOW);
vTaskDelay(10);
}
}
// Task 2, dimmer LED 2 dengan frekuensi 1000ms
void Task2( void * pvParameters ) {
UBaseType_t uxPriority = uxTaskPriorityGet( NULL ); //Mendapatkan header untuk priority Task 2
while(1)
{
Serial.println("Task2 is running and about to raise Task1 Priority"); //ketika Task 2 mendapat High maka akan ditampilan di serial monitor
vTaskPrioritySet( TaskHandle_2, ( uxPriority - 2 ) ); //merubah kondisi initial priority dari Task2 (mengurangi 2)
// Dim LED 2
digitalWrite(LED2, HIGH);
vTaskDelay(100);
digitalWrite(LED2, LOW);
vTaskDelay(100);
}
}
void setup() {
Serial.begin(9600);
// Atur pin LED sebagai output
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
// Membuat Task dengan perbedaan prioritas
xTaskCreate(Task1, "Task1", 128, NULL, 3, &TaskHandle_1); //Initial priority untuk Task 1 = 3
xTaskCreate(Task2, "Task2", 128, NULL, 2, &TaskHandle_2); //Initial priority untuk Task 2 = 2
// Task Scheduler
vTaskStartScheduler();
}
void loop() {
}