#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int buttonState = 0;
int ketukan;
// Deklarasi pin Lampu
const int redLight = 13;
const int yellowLight = 12;
const int greenLight = 11;
const int buttonPin = 2; // Deklarasi Button Pin
const int buzzerPin = 7; // Deklarasi Buzzer Pin
void setup() {
// put your setup code here, to run once:
pinMode(redLight, OUTPUT); //Lampu Merah
pinMode(yellowLight, OUTPUT); //Lampu Kuning
pinMode(greenLight, OUTPUT); //Lampu Hijau
pinMode(buttonPin, INPUT_PULLUP); //Button
pinMode(buzzerPin, OUTPUT); //Buzzer
}
void loop() {
// put your main code here, to run repeatedly:
// Tampilan LCD Default
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.println("Dilarang");
lcd.setCursor(0,1);
lcd.println("Menyebrang");
// Lampu Merah sebagai default
digitalWrite(redLight, HIGH);
buttonState =! digitalRead(buttonPin); // State untuk button sebelum ditekan
if(buttonState == HIGH){
// Menyalakan Lampu Kuning
digitalWrite(redLight, HIGH);
digitalWrite(yellowLight, HIGH);
delay(1000);
// Tampilan LCD Silakan Menyebrang
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Silakan");
lcd.setCursor(0,1);
lcd.println("Menyebrang");
// Menganti ke Lampu Hijau
digitalWrite(redLight, LOW);
digitalWrite(yellowLight, LOW);
digitalWrite(greenLight, HIGH);
ketukan = 0; // deklarasi mulai ketukan buzzer
// Banyak ketukan bunyi buzzer per 1 detik
while(ketukan < 6){
delay(700);
tone(buzzerPin, 500);
delay(100);
noTone(buzzerPin);
delay(100);
tone(buzzerPin, 500);
delay(100);
noTone(buzzerPin);
ketukan++;
}
// Mengembalikan tampilan ke default
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.println("Dilarang");
lcd.setCursor(0, 1);
lcd.println("Menyebrang");
// Mengganti ke Lampu Merah
digitalWrite(greenLight, LOW);
digitalWrite(redLight, HIGH);
noTone(buzzerPin);
}
}
Tekan Button Hingga
Lampu Kuning Menyala