// inisiasi pin LED untuk mobil
int carRed = 7;
int carYellow = 6;
int carGreen = 5;
// inisiasi pin push button untuk pejalan kaki
int button = 4;
// inisiasi pin LED untuk pejalan kaki
int pedRed = 3;
int pedGreen = 2;
// inisiasi waktu untuk pejalan kaki menyeberang
int crossTime = 5000;
// inisiasi variabel untuk menyimpan waktu sejak push button ditekan
unsigned long changeTime;
void setup() {
// set pin LED sebagai output
pinMode(carRed, OUTPUT);
pinMode(carYellow, OUTPUT);
pinMode(carGreen, OUTPUT);
pinMode(pedRed, OUTPUT);
pinMode(pedGreen, OUTPUT);
// set pin push button sebagai input
pinMode(button, INPUT);
// nyalakan LED hijau untuk mobil dan LED merah untuk pejalan kaki
digitalWrite(carGreen, HIGH);
digitalWrite(pedRed, HIGH);
}
void loop() {
// baca nilai dari push button
int state = digitalRead(button);
// jika push button ditekan dan lebih dari 5 detik sejak terakhir ditekan
if (state == HIGH && (millis() - changeTime) > 5000) {
// panggil fungsi untuk mengubah nyala LED
changeLights();
}
}
void changeLights() {
// matikan LED hijau untuk mobil dan nyalakan LED kuning
digitalWrite(carGreen, LOW);
digitalWrite(carYellow, HIGH);
// tunggu selama 2 detik
delay(2000);
// matikan LED kuning untuk mobil dan nyalakan LED merah
digitalWrite(carYellow, LOW);
digitalWrite(carRed, HIGH);
// tunggu selama 1 detik sampai aman
delay(1000);
// matikan LED merah untuk pejalan kaki dan nyalakan LED hijau
digitalWrite(pedRed, LOW);
digitalWrite(pedGreen, HIGH);
// tunggu selama waktu yang ditentukan
delay(crossTime);
// kedipkan LED hijau untuk pejalan kaki sebanyak 10 kali
for (int x = 0; x < 10; x++) {
digitalWrite(pedGreen, LOW);
delay(250);
digitalWrite(pedGreen, HIGH);
delay(250);
}
// matikan LED hijau untuk pejalan kaki dan nyalakan LED merah
digitalWrite(pedGreen, LOW);
digitalWrite(pedRed, HIGH);
// tunggu selama 1 detik
delay(1000);
// matikan LED merah untuk mobil dan nyalakan LED hijau
digitalWrite(carRed, LOW);
digitalWrite(carGreen, HIGH);
// catat waktu sejak pergantian lampu terakhir
changeTime = millis();
}