#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const int trigPin = 9; 
const int echoPin = 10;
const int buzzer = 8;
const int led = 7;
const int button = 6;
int tombol = 0;

LiquidCrystal_I2C lcd(0x27,16,2);

long duration;
int distance;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); //Kecepatan pengiriman data 9600 bit per detik 
  pinMode(trigPin, OUTPUT); //Setting Trigger sebagai output 
  pinMode(echoPin, INPUT); //Setting Echo sebagai input 
  pinMode(buzzer, OUTPUT); //Setting Buzzer sebagai output 
  pinMode(led, OUTPUT); //Setting led sebagai output 
  pinMode(button, INPUT); //Setting button sebagai input 
  lcd.init(); //LCD mulai menyala 
  lcd.backlight(); //Settingan agar lampu belakang LCD menyala
  lcd.setCursor(0,0); //Posisi karakter akan ditampilkan dalam LCD
  lcd.print("Jarak Parkir"); //Karakter yang akan ditampilkan dalam LCD 
  lcd.setCursor(0,1); //Posisi karakter akan ditampilkan dalam LCD
  lcd.print(""); //Karakter yang akan ditampilkan dalam LCD 
  delay(5000); //Durasi waktu karakter tampil dalam LCD yaitu 5 detik 
}

void loop() {
  // put your main code here, to run repeatedly:
  lcd.clear(); //Hapus karakter di layar LCD 
  digitalWrite(trigPin, LOW); //Trigger off mengirimkan sinyal 
  delayMicroseconds(2); //Selang waktu 0.002 detik 
  digitalWrite(trigPin, HIGH); //Trigger on mengirimkan sinyal 
  delayMicroseconds(10); // Selang waktu 0.01 detik 
  digitalWrite(trigPin, LOW); //Trigger off mengirimkan sinyal  
  
  duration = pulseIn(echoPin, HIGH); //Waktu tempuh sinyal dari dikirim Trigger, memantul, sampai diterima Echo  
  distance = duration * 0.0343/2; //Jarak = (Waktu x Kecepatan)/2 

  lcd.setCursor(0,0);
  lcd.print("Jarak: ");
  lcd.print(distance); //Menampilkan hasil pengukuran jarak
  lcd.print(" cm");
  delay(1000); //Karakter tampil selama 1 detik 

  if(distance <=30){ //Jika jarak benda <= 30 cm 
    tombol = digitalRead(button); //Membaca kondisi nilai pin digital 1/0
    if(tombol == HIGH){ //Jika tombol aktif atau dalam keadaan 1 
      digitalWrite(led, LOW); //Lampu off
      noTone(buzzer); //Buzzer off
      delay(500); //Lampu & buzzer off selama 0.5 detik 
      digitalWrite(led, HIGH); //lampu on 
      tone(buzzer, 700); //Buzzer on, f= 0.7 KHz  
      delay(200); //Lampu & buzzer on selama 0.2 detik
    }
    if(tombol == LOW){ //Jika tombol dalam keadaan 0 
      digitalWrite(led, HIGH); //Lampu on 
      tone(buzzer, 500); //Buzzer on, f = 0.5 KHz  
    }
    lcd.setCursor(0,1); //Menampilkan posisi karakter yang akan ditampilkan dalam LCD
    lcd.print("Terlalu Dekat");delay(1000); //Karakter akan tampil pada LCD selama 1 detik 
  }
  if(distance >30){ //Jika jarak benda > 30 cm 
    digitalWrite(led, LOW); //Lampu off 
    noTone(buzzer); //Buzzer off 
  }
}