#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
Servo myServo;
const int trigPin1 = 2; //Pin Trig sensor ultrasonik untuk palang
const int echoPin1 = 3; //Pin echo sensor ultrasonik untuk palang
const int servoPin = 9; //untuk servo
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD: 0x27, 16 kolom, 2 baris
const int trigPin2 = 7; // Pin Trig sensor ultrasonik slot parkir pertama
const int echoPin2 = 6; // Pin Echo sensor ultrasonik slot parkir pertama
const int trigPin3 = 12; // Pin Trig sensor ultrasonik slot parkir kedua
const int echoPin3 = 11; // Pin Echo sensor ultrasonik slot parkir kedua
void setup() {
Serial.begin(9600);
lcd.begin(16, 2); // Inisialisasi LCD
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3, INPUT);
myServo.attach(servoPin);
lcd.print("Slot 1: ");
lcd.setCursor(0, 1);
lcd.print("Slot 2: ");
}
void loop() {
long duration, distance;
int distance1 = getDistance(trigPin2, echoPin2);
int distance2 = getDistance(trigPin3, echoPin3);
updateLCDStatus(1, distance1);
updateLCDStatus(2, distance2);
delay(1000); // Delay 1 detik antar pembacaan
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration = pulseIn(echoPin1, HIGH);
distance = (duration / 2) / 29.1;
if (distance < 10) { // Adjust this threshold based on your setup
openGate();
delay(5000); // Keep the gate open for 5 seconds (adjust as needed)
closeGate();
}
}
int getDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
return pulseIn(echoPin, HIGH) * 0.034 / 2; // Menghitung jarak dalam cm
}
void openGate() {
myServo.write(90); // Adjust the angle for your servo
}
void closeGate() {
myServo.write(0); // Adjust the angle for your servo
}
void updateLCDStatus(int slot, int distance) {
lcd.setCursor(6, slot - 1);
if (distance < 10) {
lcd.print("Full ");
} else {
lcd.print("Empty ");
}
}