#define LED1 12
#define LED2 13
#define Tbl_Masuk 19
SemaphoreHandle_t interruptSemaphore;
void setup() {
// Konfigurasi pin Tbl_Masuk sebagai input dengan pull-up internal
pinMode(Tbl_Masuk, INPUT_PULLUP);
// Membuat task untuk kontrol LED
xTaskCreate(
TaskLed, // Fungsi task
"Led", // Nama task
1024, // Ukuran stack
NULL, // Parameter untuk task
0, // Prioritas
NULL // Handle task
);
// Membuat semaphore untuk interrupt
interruptSemaphore = xSemaphoreCreateBinary();
if (interruptSemaphore != NULL) {
// Menyambungkan interrupt pada pin digital
attachInterrupt(digitalPinToInterrupt(Tbl_Masuk), interruptHandler, FALLING);
}
}
void loop() {
vTaskDelete(NULL); // Menghentikan loop() karena FreeRTOS akan mengendalikan alur program
}
void interruptHandler() {
xSemaphoreGiveFromISR(interruptSemaphore, NULL);
}
void TaskLed(void *pvParameters) {
(void) pvParameters;
pinMode(LED1, OUTPUT);
boolean stat = false;
for (;;) {
if (xSemaphoreTake(interruptSemaphore, portMAX_DELAY) == pdPASS) {
stat = !stat;
digitalWrite(LED1, stat);
}
vTaskDelay(10 / portTICK_PERIOD_MS); // Menunda selama 10 ms
}
}