Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SPI.h>
- #include <RFID.h>
- #include <Servo.h>
- RFID rfid(10, 4); //D10:pin of tag reader SDA. D9:pin of tag reader RST
- unsigned char status;
- unsigned char str[MAX_LEN]; //MAX_LEN is 16: size of the array
- String accessGranted [2] = {"310988016", "271011115139"}; //RFID serial numbers to grant access to
- int accessGrantedSize = 2; //The number of serial numbers
- Servo lockServo; //Servo for locking mechanism
- int lockPos = 15; //Locked position limit
- int unlockPos = 400; //Unlocked position limit
- bool locked = true;
- int redLEDPin = 5;
- int greenLEDPin = 6;
- void setup()
- {
- Serial.begin(9600); //Serial monitor is only required to get tag ID numbers and for troubleshooting
- SPI.begin(); //Start SPI communication with reader
- rfid.init(); //initialization
- pinMode(redLEDPin, OUTPUT); //LED startup sequence
- pinMode(greenLEDPin, OUTPUT);
- digitalWrite(redLEDPin, HIGH);
- delay(200);
- digitalWrite(greenLEDPin, HIGH);
- delay(200);
- digitalWrite(redLEDPin, LOW);
- delay(200);
- digitalWrite(greenLEDPin, LOW);
- lockServo.attach(8);
- lockServo.write(lockPos); //Move servo into locked position
- Serial.println("Place card/tag near reader...");
- }
- void loop()
- {
- if (rfid.findCard(PICC_REQIDL, str) == MI_OK) //Wait for a tag to be placed near the reader
- {
- Serial.println("Card found");
- String temp = ""; //Temporary variable to store the read RFID number
- if (rfid.anticoll(str) == MI_OK) //Anti-collision detection, read tag serial number
- {
- Serial.print("The card's ID number is : ");
- for (int i = 0; i < 4; i++) //Record and display the tag serial number
- {
- temp = temp + (0x0F & (str[i] >> 4));
- temp = temp + (0x0F & str[i]);
- }
- Serial.println (temp);
- checkAccess (temp); //Check if the identified tag is an allowed to open tag
- }
- rfid.selectTag(str); //Lock card to prevent a redundant read, removing the line will make the sketch read cards continually
- }
- rfid.halt();
- }
- void checkAccess (String temp) //Function to check if an identified tag is registered to allow access
- {
- bool granted = false;
- for (int i=0; i <= (accessGrantedSize-1); i++) //Runs through all tag ID numbers registered in the array
- {
- if(accessGranted[i] == temp) //If a tag is found then open/close the lock
- {
- Serial.println ("Access Granted");
- granted = true;
- if (locked == true) //If the lock is closed then open it
- {
- lockServo.write(unlockPos);
- locked = false;
- }
- else if (locked == false) //If the lock is open then close it
- {
- lockServo.write(lockPos);
- locked = true;
- }
- digitalWrite(greenLEDPin, HIGH); //Green LED sequence
- delay(200);
- digitalWrite(greenLEDPin, LOW);
- delay(200);
- digitalWrite(greenLEDPin, HIGH);
- delay(200);
- digitalWrite(greenLEDPin, LOW);
- delay(200);
- }
- }
- if (granted == false) //If the tag is not found
- {
- Serial.println ("Access Denied");
- for (int blinks = 0; blinks < 2; blinks++){
- digitalWrite(redLEDPin, HIGH); //Red LED sequence
- delay(200);
- digitalWrite(redLEDPin, LOW);
- delay(200);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement