#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#define IR_IN_PIN 2
#define IR_OUT_PIN 3
#define LED_GREEN_IN_PIN 4
#define LED_RED_IN_PIN 5
#define LED_GREEN_OUT_PIN 6
#define LED_RED_OUT_PIN 7
#define SERVO_IN_PIN 9
#define SERVO_OUT_PIN 10
#define KOSONG 6
#define TERISI 0
// Inisialisasi objek untuk menangani LCD dan Servo
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servoIn;
Servo servoOut;
// Variabel untuk melacak status parkir
int PARKIR_KOSONG = KOSONG;
int PARKIR_TERISI = TERISI;
// Fungsi untuk memperbarui tampilan LCD
void updateLCD() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Parkir Kosong:");
lcd.print(PARKIR_KOSONG);
lcd.setCursor(0, 1);
lcd.print("Parkir Terisi:");
lcd.print(PARKIR_TERISI);
}
void setup() {
// Inisialisasi pin I/O
pinMode(IR_IN_PIN, INPUT);
pinMode(IR_OUT_PIN, INPUT);
pinMode(LED_GREEN_IN_PIN, OUTPUT);
pinMode(LED_RED_IN_PIN, OUTPUT);
pinMode(LED_GREEN_OUT_PIN, OUTPUT);
pinMode(LED_RED_OUT_PIN, OUTPUT);
// Inisialisasi LCD dan Servo
lcd.init();
lcd.backlight();
servoIn.attach(SERVO_IN_PIN);
servoOut.attach(SERVO_OUT_PIN);
// Tampilkan status awal parkir di LCD
updateLCD();
}
void loop() {
if ((digitalRead(IR_IN_PIN) == LOW) && (digitalRead(IR_OUT_PIN) == LOW)) {
digitalWrite(LED_GREEN_IN_PIN, HIGH);
digitalWrite(LED_RED_IN_PIN, LOW);
digitalWrite(LED_GREEN_OUT_PIN, HIGH);
digitalWrite(LED_RED_OUT_PIN, LOW);
servoIn.write(90);
servoIn.write(0);
servoOut.write(90);
servoOut.write(0);
delay(3000);
} else {
// Sensor tidak mendeteksi gerakan
digitalWrite(LED_GREEN_IN_PIN, LOW);
digitalWrite(LED_RED_IN_PIN, HIGH);
digitalWrite(LED_GREEN_OUT_PIN, LOW);
digitalWrite(LED_RED_OUT_PIN, HIGH);
// Gerakan micro servo in
servoIn.write(90);
// Gerakan micro servo out
servoOut.write(90);
}
// Cek status sensor infrared in
if (digitalRead(IR_IN_PIN) == LOW) {
// Sensor mendeteksi gerakan
digitalWrite(LED_GREEN_IN_PIN, HIGH);
digitalWrite(LED_RED_IN_PIN, LOW);
// Gerakan micro servo in
servoIn.write(90);
servoIn.write(0);
delay(3000);
// Kurangi jumlah parkir tersedia
PARKIR_KOSONG--;
PARKIR_TERISI++;
// Update tampilan LCD
updateLCD();
} else {
// Sensor tidak mendeteksi gerakan
digitalWrite(LED_GREEN_IN_PIN, LOW);
digitalWrite(LED_RED_IN_PIN, HIGH);
// Gerakan micro servo in
servoIn.write(90);
}
// Cek status sensor infrared out
if (digitalRead(IR_OUT_PIN) == LOW) {
// Sensor mendeteksi gerakan
digitalWrite(LED_GREEN_OUT_PIN, HIGH);
digitalWrite(LED_RED_OUT_PIN, LOW);
// Gerakan micro servo out
servoOut.write(90);
servoOut.write(0);
delay(3000);
// Tambah jumlah parkir tersedia
PARKIR_KOSONG++;
PARKIR_TERISI--;
// Update tampilan LCD
updateLCD();
} else {
// Sensor tidak mendeteksi gerakan
digitalWrite(LED_GREEN_OUT_PIN, LOW);
digitalWrite(LED_RED_OUT_PIN, HIGH);
// Gerakan micro servo out
servoOut.write(90);
}
}