#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>
#include <Servo.h>
#define RST_PIN 9 // Configurable, see typical pin layout above
#define SS_PIN 10 // Configurable, see typical pin layout above
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Servo myservo; // create servo object to control a servo
String read_rfid;
String ok_rfid_1 = "6722323b";
String ok_rfid_2 = "99be859e";
int posClosed = 180; // variable to store the servo position for locked
int posOpen = 0; //same for open...
/*
Initialize.
*/
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 card
lcd.begin(16, 2);
lcd.clear();
lcd.print("Scan your card:");
Serial.println("Scan your card:");
//Choose which lock below:
myservo.attach(7); // attaches the servo on pin 7 to the servo object
}
/*
Helper routine to dump a byte array as hex values to Serial.
*/
void dump_byte_array(byte *buffer, byte bufferSize) {
read_rfid = "";
for (byte i = 0; i < bufferSize; i++) {
read_rfid = read_rfid + String(buffer[i], HEX);
}
}
void open_lock() {
//Use this routine when working with Servos.
lcd.print("Servo Unlocking");
myservo.write(posOpen);
Serial.println("Servo Unlocking");
delay(10000);
myservo.write(posClosed);
lcd.clear();
lcd.print("Servo Locking");
Serial.println("Servo Locking");
}
void loop() {
lcd.clear();
lcd.print("test");
// Look for new cards
if (!mfrc522.PICC_IsNewCardPresent())
return;
// Select one of the cards
if (!mfrc522.PICC_ReadCardSerial())
return;
dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
if (read_rfid == ok_rfid_1) {
open_lock();
lcd.clear();
lcd.print(read_rfid + " (FRED FARMER)" + " -Access Granted");
Serial.println(read_rfid + " (FRED FARMER)" + " -Access Granted");
delay(10000);
lcd.clear();
lcd.print("Scan a card:");
Serial.println("Scan a card:");
}
if (read_rfid == ok_rfid_2) {
open_lock();
lcd.clear();
lcd.print(read_rfid + " (JOHN DOE) " + " -Access Granted");
Serial.println(read_rfid + " (JOHN DOE) " + " -Access Granted");
delay(10000);
lcd.clear();
lcd.print("Scan a card:");
Serial.println("Scan a card:");
} else {
lcd.clear();
lcd.print(read_rfid + " -Access Denied");
Serial.println(read_rfid + " -Access Denied");
delay(10000);
lcd.clear();
lcd.print("Scan your card:");
Serial.println("Scan your card:");
}
}
I have tried running the Arduino library's "Hello World" example, and it successfully runs the text onto the screen. Therefore I have determined that it is not a hardware problem, rather a code problem. It occasionally does display "ff" on the LCD, but that's it.