#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#define SS_PIN 10
#define RST_PIN A0
#define RELAY A1
MFRC522 rfid(SS_PIN, RST_PIN);
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2); // Initialize 16x2 LCD
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9,8,7,6};
byte colPins[COLS] = {5,4,3,2};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
int saldo = 50000;
int hargaPerLiter = 10000;
String inputLiter = "";
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
pinMode(RELAY, OUTPUT);
digitalWrite(RELAY, HIGH);
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Sistem SPBU RFID");
delay(2000);
lcd.clear();
}
void loop() {
lcd.setCursor(0,0);
lcd.print("Tempel Kartu...");
if (!rfid.PICC_IsNewCardPresent()) return;
if (!rfid.PICC_ReadCardSerial()) return;
lcd.clear();
lcd.print("Kartu Diterima");
delay(1500);
lcd.clear();
lcd.print("Saldo:");
lcd.print(saldo);
delay(2000);
lcd.clear();
lcd.print("Masukkan Liter:");
inputLiter="";
while(true){
char key = keypad.getKey();
if(key){
if(key>='0' && key<='9'){
inputLiter += key;
lcd.setCursor(0,1);
lcd.print(inputLiter);
}
if(key=='#'){
break;
}
if(key=='*'){
inputLiter="";
lcd.setCursor(0,1);
lcd.print(" ");
}
}
}
int liter = inputLiter.toInt();
int totalHarga = liter * hargaPerLiter;
lcd.clear();
lcd.print("Total:");
lcd.print(totalHarga);
delay(2000);
if(saldo >= totalHarga){
saldo -= totalHarga;
lcd.clear();
lcd.print("Mengisi Bensin");
digitalWrite(RELAY, LOW);
delay(liter * 2000);
digitalWrite(RELAY, HIGH);
lcd.clear();
lcd.print("Sisa Saldo:");
lcd.setCursor(0,1);
lcd.print(saldo);
}else{
lcd.clear();
lcd.print("Saldo Kurang");
}
delay(4000);
lcd.clear();
rfid.PICC_HaltA();
}Loading
mfrc522
mfrc522