Hi everyone,
I am new to Arduino, and I am currently working on a project to create a credit card payment system using RFID tags and an Arduino Uno. I am using an LCD screen, the RFID sensor, and I would also like to use a keypad to enter the price of the items.
Due to the lack of digital pins, I have used both digital and analogue pins for connecting my keypad. However, when I connect the keypad, it does not allow me to enter any numbers. Can someone help??
Thanks in advance
#include <Wire.h>
#include <LiquidCrystal.h>
#include <SPI.h>
#include <MFRC522.h>
#include <Keypad.h>
#define RST_PINÂ Â Â Â 9Â Â Â Â Â // Configurable, see typical pin layout above
#define SS_PINÂ Â Â Â Â 10Â Â Â Â // Configurable, see typical pin layout above
char price = 0;
char MoneyLeft = 10;
MFRC522 mfrc522(SS_PIN, RST_PIN);
String value = "A9 A4 DE 8B";// Create MFRC522 instance
float cost = 0;
int c = 0;
int decimal =0;
int rs = 7;
int en=8;
int d4 = 3;
int d5= 4;
int d6= 5;
int d7 = 6;
int buzzPin = 2;
int buzztime = 500;
int t= 0;
float addition = 0;
const int buzzer =2;
String thirdscan ="";
String lastscan = "";
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
String serialnumbers[] = {"A9 A4 DE 8B", "0A FA 82 16"};
String names[] = {"Alex", "Marta"};
float account[] = {10, 20};
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns
// Define the Keymap
char keys[ROWS][COLS] = {
 {'1','2','3', 'A'},
 {'4','5','6', 'B'},
 {'7','8','9', 'C'},
 {'#','0','*', 'D'}
};
// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = { 1, 0, A0, A1 };
// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
byte colPins[COLS] = { A2, A3, A4, A5};
// Create the Keypad
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
char rawprice [] ={};
int i = 0;
void setup() {
Serial.begin(9600);Â // Initialize serial communications with the PC
 while (!Serial);  // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
 SPI.begin();   // Init SPI bus
 mfrc522.PCD_Init(); // Init MFRC522
 mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader details
 Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks..."));
lcd.begin(16,2);
pinMode(buzzer, OUTPUT);
}
void loop() {
 // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.
lcd.setCursor(0,0);
 // Look for new cards
 if ( ! mfrc522.PICC_IsNewCardPresent())
 {
  return;
 }
 // Select one of the cards
 if ( ! mfrc522.PICC_ReadCardSerial())
 {
  return;
 }
 //Show UID on serial monitor
 Serial.print("UID tag :");
 String content= "";
 byte letter;
Â
 for (byte i = 0; i < mfrc522.uid.size; i++)
 {
  Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
  Serial.print(mfrc522.uid.uidByte[i], HEX);
  content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
  content.concat(String(mfrc522.uid.uidByte[i], HEX));
 }
 Serial.println();
 content.toUpperCase();
 for (c = 0; c <= 1; c++){
   if (content.substring(1) == serialnumbers[c]) //change here the UID of the card/cards that you want to give access
 {
    Â
    tone(buzzer, 1600);
    delay(100);// ...for 1 sec
    noTone(buzzer);
    lcd.clear();
    if (lastscan != content.substring(1)){
     lcd.print(names[c]);
     lcd.print("'s account:");
     lcd.setCursor(0,1);
     lcd.print(account[c]);
     delay(1500);
     lcd.clear();
     lcd.print("Scan again to");
     lcd.setCursor(0,1);
     lcd.print("buy something...");
    Â
     }
    else{Â
    Â
  Serial.print("How much does this cost");
   lcd.print("Item Cost: ");
   lcd.setCursor(0,1);
   for (i = 0; i<= 4; i++) {
    rawprice[i] = {kpd.getKey()};
    if (rawprice[i] == '#'){
    Â
     break;
    }
   Â
   }
   if (rawprice[1] == '*'){
    decimal = 1;
    rawprice[2] = {rawprice[2]*0.1};
    rawprice[3] = {rawprice[3]*0.01};
    price = rawprice[0] + rawprice[2] + rawprice[3];
   }
   else{
    float price = rawprice[0] + rawprice [1] + rawprice[2] + rawprice[3];
   }
  Â
  Â
  Â
   lcd.print(price);
   Â
    delay(1500);
    lcd.clear();
   float money = account[c];
   if (money - price >= 0){
   float (money -= price);
   account[c] = (float)money;
  Serial.println();
  Serial.println(money);
  lcd.print("Money left: ");
  lcd.setCursor(0,1);
  lcd.print(money);
  delay(1500);
  lcd.clear();
  lcd.setCursor(4,0);
  lcd.print("Success!");
 }
  else{
   lcd.print("Not enough");
   lcd.setCursor(0,1);
   lcd.print("money in account");
  }
    }}
  delay(1500);
  char rawprice [] = {};
 }
 thirdscan = lastscan;
 lastscan = content.substring(1);
 content.substring(1) ="";
 }