#include <Wire.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
Servo entryGateServo;
Servo exitGateServo;
LiquidCrystal_I2C lcd(0x27, 16, 2); // 0x27 is the I2C address, 16 is the number of columns, and 2 is the number of rows
int entryInfraredPin = 2;
int exitInfraredPin = 3;
int maxParkingSpaces = 4; // มีที่จอดรถได้สูงสุด
int carsInside = 0;
void setup() {
entryGateServo.attach(9);
exitGateServo.attach(10);
lcd.begin(16,2);
pinMode(entryInfraredPin, INPUT);
pinMode(exitInfraredPin, INPUT);
lcd.print("Automatic model");
lcd.backlight(); // เปิดแสง LCD
}
void loop() {
int entryInfraredValue = digitalRead(entryInfraredPin); //ตรวจสอบสถานะของเซนเซอร์อินฟราเรดที่ทางเข้าและทางออกโดยใช้
int exitInfraredValue = digitalRead(exitInfraredPin);
if (entryInfraredValue == HIGH) {
// Car entering
if (carsInside < maxParkingSpaces) {
carsInside++;
entryGateServo.write(0); // เซอร์โวประตูทางเข้าเพื่อเปิด
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Car Entered");
lcd.setCursor(0, 1);
lcd.print("In: " + String(carsInside) + " space: " + String(maxParkingSpaces - carsInside));//
delay(5000); // แสดงผลเป็นเวลา 5 วินาที
entryGateServo.write(90); // เซอร์โวประตูทางเข้าเพื่อปิด
} else {
lcd.clear();
lcd.print("Parking Full");
delay(5000);
}
} else if (exitInfraredValue == HIGH) {
// Car exiting
if (carsInside > 0) { //ตรวจสอบว่ามีรถที่ต้องการออกจากพื้นที่จอดหรือไม่
carsInside--;
exitGateServo.write(0); // เซอร์โวประตูทางออกเพื่อเปิด
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PARKING");
lcd.setCursor(0, 1);
lcd.print("In: " + String(carsInside) + " space: " + String(maxParkingSpaces - carsInside));//แสดงข้อความที่บอกจำนวนรถที่ยังอยู่ในพื้นที่จอด (In) และที่ว่างอยู่ (space) บน LCD.
delay(5000);
exitGateServo.write(90);
} else {
lcd.clear();
lcd.print("No Cars Inside");//ไม่มีรถอยู่ในพื้นที่จอดรถ หลังจากที่มีการตรวจจับรถที่จะออก
delay(2000);
}
}
}