#include <Arduino.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
// Definisi Task Priority
#define LED_TASK_PRIORITY 1
#define BUTTON_TASK_PRIORITY 2
#define LED_PIN 13 // Mengganti LED_BUILTIN dengan 13 karena gatau gabisa tdi
// Deklarasi Task Handle
TaskHandle_t xLedTaskHandle = NULL;
TaskHandle_t xButtonTaskHandle = NULL;
void vLedTask(void *parameters){
// LED set ke Output
pinMode(LED_PIN, OUTPUT);
while(1){
// Membalikkan status LED
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
// Delay 500ms
vTaskDelay(500/portTICK_PERIOD_MS);
}
}
void vButtonTask(void *parameters){
// Pin 2 sebagai Pull-up Resistor
pinMode(2, INPUT_PULLUP);
while(1){
// Definisi Button State
int state = digitalRead(2);
// Conditional Button ditekan
if (state = LOW){
vTaskSuspend(xLedTaskHandle);
Serial.println("Task Suspended");
}else{
// Melanjutkan Task LED
vTaskResume(xLedTaskHandle);
Serial.println("Task Resumed");
}
// Delay 100ms
vTaskDelay(100/portTICK_PERIOD_MS);
}
}
void setup() {
// Serial dengan kecepatan baud rate 9600
Serial.begin(9600);
// Membuat Task LED dan Button
xTaskCreatePinnedToCore(
vLedTask, // Task Function
"Toggle LED", // Nama Task
1024, // Ukuran Stack
NULL, // Parameter Task
LED_TASK_PRIORITY,// Task Priority
&xLedTaskHandle, // Task Handle diatas
0); // Core yang dipakai
xTaskCreatePinnedToCore(
vButtonTask, // Task Function
"Toggle Button", // Nama Task
1024, // Ukuran Task
NULL, // Parameter Task
BUTTON_TASK_PRIORITY,// Task Priority
&xButtonTaskHandle, // Task Handle
1 // Core yang dipakai
);
// Menghapus task setup dan loop
vTaskDelete(NULL);
}
void loop() {}