/*
03 - Lampu Lalu Lintas Interaktif
Membuat simulasi lampu lalu lintas untuk mobil dan penyebrang pejalan kaki.
*/
int carRed = 7; //lampu untuk mobil
int carYellow = 6;
int carGreen = 5;
int button = 4; //pin push button
int pedRed = 3; //lampu untuk pejalan kaki
int pedGreen = 2;
int crossTime =1000; //waktu untuk pejalan kaki menyeberang
unsigned long changeTime; //waktu sejak push button ditekan
void setup() {
pinMode(carRed, OUTPUT);
pinMode(carYellow, OUTPUT);
pinMode(carGreen, OUTPUT);
pinMode(pedRed, OUTPUT);
pinMode(pedGreen, OUTPUT);
pinMode(button, INPUT);
digitalWrite(carGreen, HIGH); //nyalakan LED hijau untuk mobil
digitalWrite(pedRed, HIGH);
}
void loop() {
int state = digitalRead(button);
//memeriksa apakah push button ditekan dan lebih dari 5 detik sejak push button terakhir ditekan
if(state == HIGH && (millis() - changeTime)> 1000){
//memanggil fungsi untuk mengubah nyala LED
changeLights();
}
}
void changeLights() {
digitalWrite(carGreen, LOW); //LED hijau untuk mobil mati
digitalWrite(carYellow, HIGH); //LED kuning untuk mobil nyala
delay(1000); //jeda selama 2 detik
digitalWrite(carYellow, LOW); //LED kuning untuk mobil mati
digitalWrite(carRed, HIGH); //LED merah untuk mobil nyala
delay(1000); //tunggu 1 detik sampai aman
digitalWrite(pedRed, LOW); //LED merah untuk pejalan kaki mati
digitalWrite(pedGreen, HIGH); //LED hijau untuk pejalan kaki nyala
delay(crossTime); //tunggu untuk waktu yang telah ditentukan
//mengedipkan LED hijau untuk pejalan kaki
for (int x=0; x<10; x++) {
digitalWrite(pedGreen, HIGH);
delay(250);
digitalWrite(pedGreen, LOW);
delay(250);
}
digitalWrite(pedRed, HIGH); //LED merah untuk pejalan kaki nyala
delay(500);
digitalWrite(carRed, LOW); //LED merah untuk mobil mati
digitalWrite(carYellow, HIGH); //LED kuning untuk mobil nyala
tone(1, 92);
delay(1000);
digitalWrite(carYellow, LOW); //LED kuning untuk mobil mati
digitalWrite(carGreen, HIGH); //LED hijau untuk mobil nyala
changeTime = millis(); //catat waktu sejak pergantian lampu terakhir
//kemudian kembali ke program utama loop
}