#define buzzer 4 //penetapan variabel data buzzer pada pin 22
#define button 2 //penetapan variabel data button pada pin 18
#define RLED 19 //penetapan variabel data RLED pada pin 33
#define YLED 18 //penetapan variabel data YLED pada pin 32
#define GLED 25 //penetapan variabel data GLED pada pin 25
// Variabel untuk menyimpan status button
int buttonkondisi = 0;
unsigned long sebelum = 0;
unsigned long tindakan = 1000; //tindakan di lakukan setiap 1 detik
bool statuskuning = false;
void setup() { //untuk menuliskan penetapan fungsi awal
// pin mode yang digunakan setiap pin
pinMode(button, INPUT_PULLUP); //penetapan pin mode input untuk button
pinMode(RLED, OUTPUT); //penetapan pin mode output untuk RLED
pinMode(YLED, OUTPUT); //penetapan pin mode output untuk YLED
pinMode(GLED, OUTPUT); //penetapan pin mode output untuk GLED
pinMode(buzzer, OUTPUT); //penetapan pin mode output untuk buzzer
Serial.begin(9600); // penetapan budread seral pada 9600
}
void loop() { //untuk menuliskan perintah kerja berulang
// Baca status tombol
buttonkondisi = digitalRead(button); //membaca nilai sensor input dari button
// Jika tombol OFF ditekan
if (buttonkondisi == HIGH) { //untuk menentukan kondisi setelah pembacaan input
//jika button dalam kondisi HIGH (hidup) maka
// LED merah menyala
digitalWrite(RLED, HIGH); //memberi tegangan positif pada RLED (hidup)
// Periksa apakah sudah waktunya mengubah status lampu kuning
unsigned long saatini = millis();
if (saatini - sebelum >= tindakan) {
// Simpan waktu terakhir perubahan
sebelum = saatini;
// mengubah status lampu kuning
statuskuning = !statuskuning;
// merapkan status lampu kuning
digitalWrite(YLED, statuskuning ? HIGH : LOW);
}
//LED hijau dan buzzer mati
digitalWrite(GLED, LOW); //memberi tegangan negatif pada GLED (mati)
digitalWrite(buzzer, LOW); //memberi tegangan negatif pada buzzer (mati)
Serial.println("Dilarang Menyeberang Jalan"); // menampilkan nilai variabel 'Dilarang Menyeberang Jalan'
}
// Jika tombol ON ditekan
else {
// LED hijau menyala selama 4 detik, merah dan kuning mati, buzzer ON
digitalWrite(RLED, LOW); //memberi tegangan negatif pada RLED (mati)
digitalWrite(YLED, LOW); //memberi tegangan negatif pada YLED (mati)
digitalWrite(GLED, HIGH); //memberi tegangan positif pada GLED (hidup)
digitalWrite(buzzer, HIGH); //memberi tegangan positif pada buzzer (hidup)
tone(buzzer, 262);
// Tampilkan pesan pada Serial Monitor
Serial.println("Silahkan Menyeberang Jalan"); // menampilkan nilai variabel 'Silahkan Menyeberang Jalan'
// Tunggu selama 4 detik
delay(4000); //memberikan jeda waktu untuk program selanjutnya
// Matikan buzzer, hijau
tone(buzzer,0);
digitalWrite(GLED, LOW); //memberi tegangan negatif pada GLED (mati)
}
}