/*
Kelompok 5 - (Sistem Parkir Otomatis)
  * Alfan Almarogy
  * Dede Ridwan
  * Fadhil Muhammad
*/


/* Library */
#include <LiquidCrystal_I2C.h>
#include <Servo.h>


/* Deklarasi Variable & Object */ 
// Alamat I2C untuk LCD
LiquidCrystal_I2C lcd(0x27,16,2);

// Object dari Class Servo
Servo motorServo;

// Variable Lampu
const int pinMerah = 4;
const int pinHijau = 5;

// Variable Sensor Ultrasonik
const int echoPin = 12; 
const int trigPin = 13;
const int servoPin = 3;

// Variable Sensor Buzzer
const int buzzer = 8;

// Variable iterasi dari Nilai mobil
int iterasi = 0;
int parkirTersedia = 5;


void setup() {

  /* bagian LCD */
  lcd.init();
  lcd.begin(16, 2); 
  lcd.clear();
  lcd.backlight();  
  lcd.setCursor(0,0);
  lcd.print("PARKIR YANG");
  lcd.setCursor(0,1);
  lcd.print("TERSEDIA : ");
  lcd.setCursor(11, 1);
  lcd.print(parkirTersedia);

  /* bagian Ultrasonik */
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);

  /* lampu LED */
  pinMode(pinMerah, OUTPUT);
  pinMode(pinHijau, OUTPUT);

  /* bagian Servo */
  motorServo.attach(servoPin);
  motorServo.write(0);

  /* bagian suara */
  pinMode(buzzer, OUTPUT);

  /* bagian Serial begin */
  Serial.begin(9600);

}

void loop() {

  /* pemubatan variable */
  double durasi, jarak;

  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  durasi = pulseIn(echoPin, HIGH);
  jarak = (durasi / 2) / 29.1;

  digitalWrite(pinHijau, HIGH);

  /* pengkondisian */
  if(jarak > 0 && jarak < 3) {
  if (iterasi < 5)  {
    tone(buzzer, 500, 500);
    iterasi++;
    parkirTersedia--;
    updateLCD();
    openGate();
    delay(3000); // Delay untuk menghindari multiple detection
    }
  }

  if (iterasi >= 5) {
    digitalWrite(pinHijau, LOW); 
    digitalWrite(pinMerah, HIGH); 
  } else {
    digitalWrite(pinMerah, LOW);
  }
}

/* fungsi updateLCD */
void updateLCD() {
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("PARKIR YANG");
  lcd.setCursor(0,1);
  lcd.print("TERSEDIA : ");
  lcd.setCursor(11, 1);
  lcd.print(parkirTersedia);
}

/* fungsi openGate() */
void openGate() {
    motorServo.write(90);
    delay(4000); // 4 detik
    motorServo.write(0);
}
$abcdeabcde151015202530354045505560fghijfghij
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
servo1:GND
servo1:V+
servo1:PWM
bz1:1
bz1:2
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND
led1:A
led1:C
led2:A
led2:C