Thursday, February 13, 2025

RFID_Toll_tax_collection

  #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

MUD Three Mode operation Manual Automatic GPS

 Code for three mode operation: /*   3-Mode Headlight Controller   - Manual mode (driver uses a toggle to pick high/low)   - Auto mode (LDR...