#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo tollGate;
String card1 = "23222E28"; // Replace with actual UID
String card2 = "78E9F0G1H2"; // Replace with actual UID
int balance1 = 200;
int balance2 = 200;
int tollFee = 50;
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
lcd.init(); // ✅ Fixed: Initialize LCD properly
lcd.backlight(); // ✅ Fixed: Turn on LCD backlight
lcd.setCursor(2, 0);
lcd.print("RFID Toll Tax");
delay(3000);
lcd.clear();
tollGate.attach(6);
tollGate.write(0);
}
void loop() {
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) {
return;
}
String readID = "";
for (byte i = 0; i < rfid.uid.size; i++) {
readID += String(rfid.uid.uidByte[i], HEX);
}
readID.toUpperCase();
Serial.println("Card Detected: " + readID);
lcd.clear();
lcd.setCursor(0, 0);
if (readID == card1) {
processToll(balance1, "Card 1");
} else if (readID == card2) {
processToll(balance2, "Card 2");
} else {
lcd.print("Unauthorized Card");
Serial.println("Unauthorized Card");
delay(1500);
}
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
void processToll(int &balance, String cardName) {
if (balance >= tollFee) {
balance -= tollFee;
lcd.print(cardName);
lcd.setCursor(0, 1);
lcd.print("Paid: Rs 50");
Serial.println(cardName + " Paid Rs 50");
tollGate.write(90);
delay(2000);
tollGate.write(0);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Bal: Rs " + String(balance));
Serial.println("Remaining Bal: Rs " + String(balance));
} else {
lcd.print(cardName);
lcd.setCursor(0, 1);
lcd.print("Insufficient Bal");
Serial.println(cardName + " Insufficient Balance");
}
delay(1500);
}
No comments:
Post a Comment