int redLED = 15; // inisialisasi pin LED merah
int yellowLED = 2; // inisialisasi pin LED kuning
int greenLED = 4; // inisialisasi pin LED hijau
int pushButton = 5; // inisialisasi pin push button
int buzzer = 18; // inisialisasi pin buzzer
unsigned long ms_from_start = 0; // waktu yang berlalu sejak program dimulai dalam miliseconds
unsigned long ms_yellow_led_previous_time = 0; // waktu terakhir ketika led kuning berubah kondisi
int yellow_led_interval = 1000; // durasi blinknig
int yellow_led_state = 1; // kondisi led kuning (on or off)
void setup() {
Serial.begin(115200); // memberi perintah untuk menampilkan teks
Serial.println("Hello, ESP32!"); // menampilkan teks "Hello, ESP32!"
pinMode(redLED, OUTPUT); // menjadikan LED Merah Sebagai output
pinMode(yellowLED, OUTPUT); // menjadikan LED Kuning sebagai output
pinMode(greenLED, OUTPUT); // menjadikan LED Hijau sebagai output
pinMode(pushButton, INPUT_PULLUP); // menjadikan Push Button sebagai input
pinMode(buzzer, OUTPUT); // menjadikan buzzer sebagai output
}
void loop() {
ms_from_start = millis(); // menjalankan waktu internal setiap milli second
int pushButtonState = digitalRead(pushButton); // inisialisasi untuk membaca pushbutton
if(pushButtonState == LOW) // menyatakan decision jika kondisi pushbutton off
{
Serial.println("Silahkan Menyebrang Jalan"); // menampilkan teks ke console
digitalWrite(redLED, LOW); // mematikan led merah
digitalWrite(yellowLED, LOW); // mematikan led kuning
// menyalakan led hijau dan buzzer selama 4 detik
digitalWrite(greenLED, HIGH);
digitalWrite(buzzer, HIGH);
delay(4000);
}
// jika push button tidak ditekan
else if(pushButtonState == HIGH) // menyatakan decision jika kondisi pushbutton on
{
Serial.println("Dilarang Menyebrang"); // menampilkan teks ke console
digitalWrite(greenLED, LOW); // mematikan led hijau
digitalWrite(redLED, HIGH); // menyalakan led merah
// blinking led kuning setiap 1 detik
digitalWrite(yellowLED, yellow_led_state);
if(ms_from_start - ms_yellow_led_previous_time > yellow_led_interval)
{
ms_yellow_led_previous_time = ms_from_start;
if(yellow_led_state == 1)
yellow_led_state = 0;
else
yellow_led_state = 1;
}
}
delay(10); // this speeds up the simulation
}