#define LED_MERAH 26
#define LED_KUNING 25
#define LED_HIJAU 33
#define BUTTON 22
unsigned long led_merah_intv = 3000;
unsigned long led_merah_ms = 0;
unsigned long led_kuning_intv = 1000;
unsigned long led_kuning_ms = 0;
unsigned long led_hijau_intv = 3000;
unsigned long led_hijau_ms = 0;
int state = 1;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(LED_MERAH, OUTPUT);
pinMode(LED_KUNING, OUTPUT);
pinMode(LED_HIJAU, OUTPUT);
pinMode(BUTTON, INPUT_PULLUP);
}
void loop() {
unsigned long currentMillis = millis();
switch (state) {
case 1:
led_merah_ms = millis();
digitalWrite(LED_MERAH, HIGH);
digitalWrite(LED_KUNING, LOW);
digitalWrite(LED_HIJAU, LOW);
state = 2;
break;
case 2:
if ((unsigned long)(currentMillis - led_merah_ms) > led_merah_intv) {
Serial.print("Lampu Merah Hidup Selama: ");
Serial.print((unsigned long)(currentMillis - led_merah_ms)/ 1000);
Serial.println(" Detik");
state = 3;
led_merah_intv = 3000;
}
break;
case 3:
led_kuning_ms = millis();
digitalWrite(LED_MERAH, LOW);
digitalWrite(LED_KUNING, HIGH);
digitalWrite(LED_HIJAU, LOW);
state = 4;
break;
case 4:
if ((unsigned long)(currentMillis - led_kuning_ms) > led_kuning_intv) {
Serial.print("Lampu Kuning Hidup Selama: ");
Serial.print((unsigned long)(currentMillis - led_kuning_ms) / 1000);
Serial.println(" Detik");
state = 5;
}
break;
case 5:
led_hijau_ms = millis();
digitalWrite(LED_MERAH, LOW);
digitalWrite(LED_KUNING, LOW);
digitalWrite(LED_HIJAU, HIGH);
state = 6;
break;
case 6:
if ((unsigned long)(currentMillis - led_hijau_ms) > led_hijau_intv) {
Serial.print("Lampu Hijau Hidup Selama: ");
Serial.print((unsigned long)(currentMillis - led_hijau_ms) / 1000);
Serial.println(" Detik");
state = 1;
}
break;
}
if(digitalRead(BUTTON) == LOW && state > 3){
led_merah_intv = 5000;
Serial.print("Tombol Pejalan Kaki Telah Di Tekan, ");
Serial.println("Durasi Lampu Merah di atur ke 5 Detik ");
}
}