#include <Arduino.h>
#include <STM32FreeRTOS.h>
// Pin LED
#define LED_RED D13 // PB3
#define LED_BLUE D9 // PA8
#define LED_GREEN D10 // PA9
// RedTask: Blink LED merah (250ms)
void RedTask(void *pvParameters) {
pinMode(LED_RED, OUTPUT);
while (1) {
digitalWrite(LED_RED, HIGH);
vTaskDelay(pdMS_TO_TICKS(250));
digitalWrite(LED_RED, LOW);
vTaskDelay(pdMS_TO_TICKS(250));
}
}
// BlueTask: Blink LED biru (500ms)
void BlueTask(void *pvParameters) {
pinMode(LED_BLUE, OUTPUT);
while (1) {
digitalWrite(LED_BLUE, HIGH);
vTaskDelay(pdMS_TO_TICKS(500));
digitalWrite(LED_BLUE, LOW);
vTaskDelay(pdMS_TO_TICKS(500));
}
}
// GreenTask: Blink LED hijau (1000ms)
void GreenTask(void *pvParameters) {
pinMode(LED_GREEN, OUTPUT);
while (1) {
digitalWrite(LED_GREEN, HIGH);
vTaskDelay(pdMS_TO_TICKS(1000));
digitalWrite(LED_GREEN, LOW);
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
void setup() {
Serial.begin(115200);
Serial.println("FreeRTOS STM32 - Hands-On 1");
// Buat RedTask (SEHARUSNYA static, tapi pakai dynamic karena keterbatasan library)
if (xTaskCreate(
RedTask, "RedTask", 128, NULL,
tskIDLE_PRIORITY + 1, NULL) != pdPASS) {
Serial.println("Gagal membuat RedTask!");
while (1);
}
// BlueTask
if (xTaskCreate(
BlueTask, "BlueTask", 128, NULL,
tskIDLE_PRIORITY + 1, NULL) != pdPASS) {
Serial.println("Gagal membuat BlueTask!");
while (1);
}
// GreenTask (prioritas lebih tinggi)
if (xTaskCreate(
GreenTask, "GreenTask", 128, NULL,
tskIDLE_PRIORITY + 2, NULL) != pdPASS) {
Serial.println("Gagal membuat GreenTask!");
while (1);
}
// Jalankan scheduler
vTaskStartScheduler();
Serial.println("Gagal memulai scheduler!");
while (1);
}
void loop() {
// Tidak digunakan
}