// Proyek #7: Kontrol Traffic Lights
int lmpMerahKendaraan = 13; //indikator lmpu kendaraan
int lmpKuningKendaraan = 14;
int lmpHijauKendaraan = 27;
int lmpMerahPjlnkaki = 25; //indikator lmpu pjlan kaki
int lmpHijauPjlnkaki = 26;
int saklar = 15; // pin saklar ditmptkn pada GPIO 15
int WaktuPjln = 5000; // lama waktu melitas
unsigned long saklarTime; // waktu saat saklar ditekan
void setup() {
pinMode(lmpMerahKendaraan, OUTPUT);
pinMode(lmpKuningKendaraan, OUTPUT);
pinMode(lmpHijauKendaraan, OUTPUT);
pinMode(lmpMerahPjlnkaki, OUTPUT);
pinMode(lmpHijauPjlnkaki, OUTPUT);
pinMode(saklar, INPUT_PULLUP); // saklar sbg input
// on-kan lmpu hijau kendaraan dan lmpu merah pjln kaki
digitalWrite(lmpHijauKendaraan, HIGH);
digitalWrite(lmpMerahPjlnkaki, HIGH);
}
void loop() {
int keadaanSaklar = digitalRead(saklar);
/* cek jika saklar ditekan dan tidak kurang 5 detik saat penekanan terakhir */
if (keadaanSaklar == LOW && (millis() - saklarTime) > 5000) {
// panggil fungsi blok untuk merubah peralihan nyala lampu
PeralihanLmp();
}
}
void PeralihanLmp() {
digitalWrite(lmpHijauKendaraan, LOW); // hijau off
digitalWrite(lmpKuningKendaraan, HIGH); // kuning on
delay(2000); // tunggu 2 detik
digitalWrite(lmpKuningKendaraan, LOW); // kuning off
digitalWrite(lmpMerahKendaraan, HIGH); // merah on
delay(1000); // tunggu 1 detik
digitalWrite(lmpMerahPjlnkaki,LOW);//lmpmerahpejln off
digitalWrite(lmpHijauPjlnkaki, HIGH);//lmphijaupejln on
delay(WaktuPjln); //tunggu sampai preset periode waktu
// kedipkan lampu hijau pjln kaki
for (int x=0; x<10; x++) {
digitalWrite(lmpHijauPjlnkaki, HIGH);
delay(250);
digitalWrite(lmpHijauPjlnkaki, LOW);
delay(250);
}
// lampu merah pejln kaki on
digitalWrite(lmpMerahPjlnkaki, HIGH);
delay(500);
digitalWrite(lmpKuningKendaraan, HIGH); //kuning on
digitalWrite(lmpMerahKendaraan, LOW); // merah off
delay(1000);
digitalWrite(lmpHijauKendaraan, HIGH);
digitalWrite(lmpKuningKendaraan, LOW); //kuning off
// merekam waktu penekanan terakhir saklar
saklarTime = millis();
}