#include <Arduino_FreeRTOS.h>
// Deklarasi tugas (tasks)
void TaskUtara(void *pvParameters);
void TaskTimur(void *pvParameters);
void TaskSelatan(void *pvParameters);
void TaskBarat(void *pvParameters);
void setup() {
// Inisialisasi PIN dan MODE
// UTARA
pinMode(1, OUTPUT); // pin 1 = Merah
pinMode(2, OUTPUT); // pin 2 = Kuning
pinMode(3, OUTPUT); // pin 3 = Hijau
// TIMUR
pinMode(4, OUTPUT); // pin 4 = Merah
pinMode(5, OUTPUT); // pin 5 = Kuning
pinMode(6, OUTPUT); // pin 6 = Hijau
// SELATAN
pinMode(7, OUTPUT); // pin 7 = Merah
pinMode(8, OUTPUT); // pin 8 = Kuning
pinMode(9, OUTPUT); // pin 9 = Hijau
// BARAT
pinMode(10, OUTPUT); // pin 10 = Merah
pinMode(11, OUTPUT); // pin 11 = Kuning
pinMode(12, OUTPUT); // pin 12 = Hijau
// Membuat tugas
xTaskCreate(TaskUtara, "Utara", 128, NULL, 1, NULL);
xTaskCreate(TaskTimur, "Timur", 128, NULL, 1, NULL);
xTaskCreate(TaskSelatan, "Selatan", 128, NULL, 1, NULL);
xTaskCreate(TaskBarat, "Barat", 128, NULL, 1, NULL);
}
void TaskUtara(void *pvParameters) {
while (1) {
// UTARA
digitalWrite(1, LOW); // Merah mati
digitalWrite(2, LOW); // Kuning mati
digitalWrite(3, HIGH); // Hijau nyala
vTaskDelay(5000 / portTICK_PERIOD_MS);
digitalWrite(3, LOW); // Hijau mati
digitalWrite(2, HIGH); // Kuning nyala
vTaskDelay(2000 / portTICK_PERIOD_MS);
digitalWrite(2, LOW); // Kuning mati
digitalWrite(1, HIGH); // Merah nyala
vTaskDelay(7000 / portTICK_PERIOD_MS);
digitalWrite(1, LOW); // Merah mati
}
}
void TaskTimur(void *pvParameters) {
while (1) {
// Tunggu sampai lampu Utara selesai
vTaskDelay(7000 / portTICK_PERIOD_MS);
// TIMUR
digitalWrite(4, LOW); // Merah mati
digitalWrite(5, LOW); // Kuning mati
digitalWrite(6, HIGH); // Hijau nyala
vTaskDelay(5000 / portTICK_PERIOD_MS);
digitalWrite(6, LOW); // Hijau mati
digitalWrite(5, HIGH); // Kuning nyala
vTaskDelay(2000 / portTICK_PERIOD_MS);
digitalWrite(5, LOW); // Kuning mati
digitalWrite(4, HIGH); // Merah nyala
vTaskDelay(7000 / portTICK_PERIOD_MS);
digitalWrite(4, LOW); // Merah mati
}
}
void TaskSelatan(void *pvParameters) {
while (1) {
// Tunggu sampai lampu Timur selesai
vTaskDelay(14000 / portTICK_PERIOD_MS);
// SELATAN
digitalWrite(7, LOW); // Merah mati
digitalWrite(8, LOW); // Kuning mati
digitalWrite(9, HIGH); // Hijau nyala
vTaskDelay(5000 / portTICK_PERIOD_MS);
digitalWrite(9, LOW); // Hijau mati
digitalWrite(8, HIGH); // Kuning nyala
vTaskDelay(2000 / portTICK_PERIOD_MS);
digitalWrite(8, LOW); // Kuning mati
digitalWrite(7, HIGH); // Merah nyala
vTaskDelay(7000 / portTICK_PERIOD_MS);
digitalWrite(7, LOW); // Merah mati
}
}
void TaskBarat(void *pvParameters) {
while (1) {
// Tunggu sampai lampu Selatan selesai
vTaskDelay(21000 / portTICK_PERIOD_MS);
// BARAT
digitalWrite(10, LOW); // Merah mati
digitalWrite(11, LOW); // Kuning mati
digitalWrite(12, HIGH); // Hijau nyala
vTaskDelay(5000 / portTICK_PERIOD_MS);
digitalWrite(12, LOW); // Hijau mati
digitalWrite(11, HIGH); // Kuning nyala
vTaskDelay(2000 / portTICK_PERIOD_MS);
digitalWrite(11, LOW); // Kuning mati
digitalWrite(10, HIGH); // Merah nyala
vTaskDelay(7000 / portTICK_PERIOD_MS);
digitalWrite(10, LOW); // Merah mati
}
}
void loop() {
// Tidak ada yang perlu dilakukan di loop
}