const int btn = 1;
struct TrafficLight {
int Red;
int Yellow;
int Green;
};
TrafficLight trafficLights[4] = {
{2, 3, 4}, // arah 1
{5, 6, 7}, // arah 2
{8, 9, 10}, // arah 3
{11, 12, 13} // arah 4
};
bool isButtonPressed = false;
void setup() {
Serial.begin(9600);
pinMode(btn, INPUT);
for (int i = 0; i < 4; i++) {
pinMode(trafficLights[i].Red, OUTPUT);
pinMode(trafficLights[i].Yellow, OUTPUT);
pinMode(trafficLights[i].Green, OUTPUT);
}
}
void loop() {
if (digitalRead(btn) == LOW) {
// Button is pressed
if (!isButtonPressed) {
isButtonPressed = true;
enterWarningMode();
}
} else {
// Button is not pressed
if (isButtonPressed) {
isButtonPressed = false;
exitWarningMode();
} else {
runTrafficLights();
}
}
}
void runTrafficLights() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (i != j) {
digitalWrite(trafficLights[j].Red, HIGH);
}
}
digitalWrite(trafficLights[i].Green, HIGH);
delay(5000);
digitalWrite(trafficLights[i].Green, LOW);
digitalWrite(trafficLights[i].Yellow, HIGH);
delay(2000);
digitalWrite(trafficLights[i].Yellow, LOW);
digitalWrite(trafficLights[i].Red, HIGH);
delay(1000);
}
}
void enterWarningMode() {
// Matikan semua lampu
for (int i = 0; i < 4; i++) {
digitalWrite(trafficLights[i].Red, LOW);
digitalWrite(trafficLights[i].Yellow, LOW);
digitalWrite(trafficLights[i].Green, LOW);
}
// Lampu kuning berkedip pelan
while (digitalRead(btn) == LOW) {
for (int i = 0; i < 4; i++) {
digitalWrite(trafficLights[i].Yellow, HIGH);
}
delay(1000); // Delay 1 detik (kedipan pelan)
for (int i = 0; i < 4; i++) {
digitalWrite(trafficLights[i].Yellow, LOW);
}
delay(1000); // Delay 1 detik (kedipan pelan)
}
}
void exitWarningMode() {
// Lampu kuning berkedip lebih cepat
for (int j = 0; j < 5; j++) { // Kedip 5 kali
for (int i = 0; i < 4; i++) {
digitalWrite(trafficLights[i].Yellow, HIGH);
}
delay(200); // Delay 0.2 detik (kedipan cepat)
for (int i = 0; i < 4; i++) {
digitalWrite(trafficLights[i].Yellow, LOW);
}
delay(200); // Delay 0.2 detik (kedipan cepat)
}
}