#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
const int buttonPin = 2;
const int buzzerPin = 3;
int parkingTime = 0; // in minutes
float ratePerMinute = 15.0; // ₹15 per minute
unsigned long lastMillis = 0;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(buzzerPin, OUTPUT);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Parking Meter");
updateDisplay();
delay (300);
}
void loop() {
if (digitalRead(buttonPin) == LOW) {
parkingTime++;
updateDisplay();
delay(300);
}
if (parkingTime > 0 && millis() - lastMillis >= 60000) {
parkingTime--;
updateDisplay();
lastMillis = millis();
}
if (parkingTime == 0) {
tone(buzzerPin, 1000);
} else {
noTone(buzzerPin);
}
}
void updateDisplay() {
float fare = parkingTime * ratePerMinute;
lcd.setCursor(0,0);
lcd.print("Time: ");
lcd.print(parkingTime);
lcd.print(" min ");
lcd.setCursor(0,1);
lcd.print("Fare: Rs.");
lcd.print(fare, 2);
lcd.print(" ");
}