#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
// Pin assignment
#define RED_A GPIO_NUM_2
#define YELLOW_A GPIO_NUM_4
#define GREEN_A GPIO_NUM_5
#define RED_B GPIO_NUM_12
#define YELLOW_B GPIO_NUM_13
#define GREEN_B GPIO_NUM_14
#define RED_C GPIO_NUM_16
#define YELLOW_C GPIO_NUM_17
#define GREEN_C GPIO_NUM_18
#define BUZZER_PIN GPIO_NUM_33 // Buzzer aktif tinggi
void setLights(int rA, int yA, int gA, int rB, int yB, int gB, int rC, int yC, int gC) {
gpio_set_level(RED_A, rA);
gpio_set_level(YELLOW_A, yA);
gpio_set_level(GREEN_A, gA);
gpio_set_level(RED_B, rB);
gpio_set_level(YELLOW_B, yB);
gpio_set_level(GREEN_B, gB);
gpio_set_level(RED_C, rC);
gpio_set_level(YELLOW_C, yC);
gpio_set_level(GREEN_C, gC);
}
void app_main(void) {
// Konfigurasi GPIO sebagai output
gpio_config_t io_conf = {
.intr_type = GPIO_INTR_DISABLE,
.mode = GPIO_MODE_OUTPUT,
.pin_bit_mask =
(1ULL<<RED_A) | (1ULL<<YELLOW_A) | (1ULL<<GREEN_A) |
(1ULL<<RED_B) | (1ULL<<YELLOW_B) | (1ULL<<GREEN_B) |
(1ULL<<RED_C) | (1ULL<<YELLOW_C) | (1ULL<<GREEN_C) |
(1ULL<<BUZZER_PIN),
.pull_down_en = GPIO_PULLDOWN_DISABLE,
.pull_up_en = GPIO_PULLUP_DISABLE,
};
gpio_config(&io_conf);
while (1) {
// === Jalan A Hijau ===
setLights(0, 0, 1, 1, 0, 0, 1, 0, 0);
gpio_set_level(BUZZER_PIN, 0); // Buzzer off
vTaskDelay(10000 / portTICK_PERIOD_MS);
// === Jalan A Kuning ===
setLights(0, 1, 0, 1, 0, 0, 1, 0, 0);
gpio_set_level(BUZZER_PIN, 1); // Buzzer on
vTaskDelay(5000 / portTICK_PERIOD_MS);
gpio_set_level(BUZZER_PIN, 0); // Buzzer off
// === Jalan B Hijau ===
setLights(1, 0, 0, 0, 0, 1, 1, 0, 0);
vTaskDelay(10000 / portTICK_PERIOD_MS);
// === Jalan B Kuning ===
setLights(1, 0, 0, 0, 1, 0, 1, 0, 0);
gpio_set_level(BUZZER_PIN, 1);
vTaskDelay(5000 / portTICK_PERIOD_MS);
gpio_set_level(BUZZER_PIN, 0);
// === Jalan C Hijau ===
setLights(1, 0, 0, 1, 0, 0, 0, 0, 1);
vTaskDelay(10000 / portTICK_PERIOD_MS);
// === Jalan C Kuning ===
setLights(1, 0, 0, 1, 0, 0, 0, 1, 0);
gpio_set_level(BUZZER_PIN, 1);
vTaskDelay(5000 / portTICK_PERIOD_MS);
gpio_set_level(BUZZER_PIN, 0);
}
}