#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <EEPROM.h>
#define SS_PIN 10
#define RST_PIN 9
#define RELAY 8
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;
String inputLiter="";
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
lcd.begin(16,2);
pinMode(RELAY, OUTPUT);
digitalWrite(RELAY, HIGH);
EEPROM.get(0, hargaPerLiter);
if(hargaPerLiter <= 0 || hargaPerLiter > 20000){
hargaPerLiter = 10000;
EEPROM.put(0, hargaPerLiter);
}
lcd.setCursor(0,0);
lcd.print("SPBU RFID System");
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("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("Isi 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