#include <MFRC522.h>
#include <Adafruit_MCP23X17.h>
#include <Wire.h>
#include <SPI.h>
#define SS_PIN1 9 //pin Arduino
#define RST_PIN1 0 //pin MCP23017
#define RST_PIN2 1
#define RST_PIN3 2
#define RST_PIN4 3
#define RST_PIN5 4
#define RST_PIN6 5
#define RST_PIN7 6
#define RST_PIN8 7
#define RST_PIN9 8
#define RST_PIN10 9
#define RST_PIN11 10
#define RST_PIN12 11
#define RST_PIN13 12
#define RST_PIN14 13
#define RST_PIN15 14
#define RST_PIN16 15
Adafruit_MCP23X17 mcp1;
int selectedRFID = -1;
String rfidUID1 = "";
String rfidUID2 = "";
String rfidUID3 = "";
String rfidUID4 = "";
String rfidUID5 = "";
String rfidUID6 = "";
String rfidUID7 = "";
String rfidUID8 = "";
String rfidUID9 = "";
String rfidUID10 = "";
String rfidUID11 = "";
String rfidUID12 = "";
String rfidUID13 = "";
String rfidUID14 = "";
String rfidUID15 = "";
String rfidUID16 = "";
bool processRFID1 = false;
bool processRFID2 = false;
bool processRFID3 = false;
bool processRFID4 = false;
bool processRFID5 = false;
bool processRFID6 = false;
bool processRFID7 = false;
bool processRFID8 = false;
bool processRFID9 = false;
bool processRFID10 = false;
bool processRFID11 = false;
bool processRFID12 = false;
bool processRFID13 = false;
bool processRFID14 = false;
bool processRFID15 = false;
bool processRFID16 = false;
MFRC522 rfid1(SS_PIN1, RST_PIN1);
MFRC522 rfid2(SS_PIN1, RST_PIN2);
MFRC522 rfid3(SS_PIN1, RST_PIN3);
MFRC522 rfid4(SS_PIN1, RST_PIN4);
MFRC522 rfid5(SS_PIN1, RST_PIN5);
MFRC522 rfid6(SS_PIN1, RST_PIN6);
MFRC522 rfid7(SS_PIN1, RST_PIN7);
MFRC522 rfid8(SS_PIN1, RST_PIN8);
MFRC522 rfid9(SS_PIN1, RST_PIN9);
MFRC522 rfid10(SS_PIN1, RST_PIN10);
MFRC522 rfid11(SS_PIN1, RST_PIN11);
MFRC522 rfid12(SS_PIN1, RST_PIN12);
MFRC522 rfid13(SS_PIN1, RST_PIN13);
MFRC522 rfid14(SS_PIN1, RST_PIN14);
MFRC522 rfid15(SS_PIN1, RST_PIN15);
MFRC522 rfid16(SS_PIN1, RST_PIN16);
void setup() {
Serial.begin(9600);
Wire.begin(8);
Wire.setClock(400000);
SPI.begin();
Wire.onRequest(requestEvent);
Wire.onReceive(receiveEvent);
mcp1.begin_I2C(0x20);
pinMode(SS_PIN1, OUTPUT);
mcp1.pinMode(RST_PIN1, OUTPUT);
mcp1.pinMode(RST_PIN2, OUTPUT);
mcp1.pinMode(RST_PIN3, OUTPUT);
mcp1.pinMode(RST_PIN4, OUTPUT);
mcp1.pinMode(RST_PIN5, OUTPUT);
mcp1.pinMode(RST_PIN6, OUTPUT);
mcp1.pinMode(RST_PIN7, OUTPUT);
mcp1.pinMode(RST_PIN8, OUTPUT);
mcp1.pinMode(RST_PIN9, OUTPUT);
mcp1.pinMode(RST_PIN10, OUTPUT);
mcp1.pinMode(RST_PIN11, OUTPUT);
mcp1.pinMode(RST_PIN12, OUTPUT);
mcp1.pinMode(RST_PIN13, OUTPUT);
mcp1.pinMode(RST_PIN14, OUTPUT);
mcp1.pinMode(RST_PIN15, OUTPUT);
mcp1.pinMode(RST_PIN16, OUTPUT);
Serial.println("Slave Siap");
}
void loop() {
if (selectedRFID == 1 && processRFID1 == true) {
digitalWrite(SS_PIN1, LOW); //Aktifkan RFID
mcp1.digitalWrite(RST_PIN1, HIGH);
rfid1.PCD_Init();
rfid1.PCD_SetAntennaGain(rfid1.RxGain_max);
if (rfid1.PICC_IsNewCardPresent() && rfid1.PICC_ReadCardSerial()) {
rfidUID1 = "";
for (byte i = 0; i < rfid1.uid.size; i++) {
rfidUID1 += String(rfid1.uid.uidByte[i] < 0x10 ? "0" : "");
rfidUID1 += String(rfid1.uid.uidByte[i], HEX);
}
rfidUID1.toUpperCase();
Serial.println("UID RFID: " + rfidUID1);
}
else {
rfidUID1 = "No RFID1";
}
rfid1.PICC_HaltA();
digitalWrite(SS_PIN1, HIGH); //Nonaktifkan RFID
mcp1.digitalWrite(RST_PIN1, LOW);
processRFID1 = false;
}
if (selectedRFID == 2 && processRFID2 == true) {
digitalWrite(SS_PIN1, LOW); //Aktifkan RFID
mcp1.digitalWrite(RST_PIN2, HIGH);
rfid2.PCD_Init();
if (rfid2.PICC_IsNewCardPresent() && rfid2.PICC_ReadCardSerial()) {
rfidUID2 = "";
for (byte i = 0; i < rfid2.uid.size; i++) {
rfidUID2 += String(rfid2.uid.uidByte[i] < 0x10 ? "0" : "");
rfidUID2 += String(rfid2.uid.uidByte[i], HEX);
}
rfidUID2.toUpperCase();
Serial.println("UID RFID: " + rfidUID2);
}
else {
rfidUID2 = "No RFID2";
}
rfid2.PICC_HaltA();
digitalWrite(SS_PIN1, HIGH); //Nonaktifkan RFID
mcp1.digitalWrite(RST_PIN2, LOW);
processRFID2 = false;
}
if (selectedRFID == 3 && processRFID3 == true) {
digitalWrite(SS_PIN1, LOW); //Aktifkan RFID
mcp1.digitalWrite(RST_PIN3, HIGH);
rfid3.PCD_Init();
if (rfid3.PICC_IsNewCardPresent() && rfid3.PICC_ReadCardSerial()) {
rfidUID3 = "";
for (byte i = 0; i < rfid3.uid.size; i++) {
rfidUID3 += String(rfid3.uid.uidByte[i] < 0x10 ? "0" : "");
rfidUID3 += String(rfid3.uid.uidByte[i], HEX);
}
rfidUID3.toUpperCase();
Serial.println("UID RFID: " + rfidUID3);
}
else {
rfidUID3 = "No RFID3";
}
rfid3.PICC_HaltA();
digitalWrite(SS_PIN1, HIGH); //Nonaktifkan RFID
mcp1.digitalWrite(RST_PIN3, LOW);
processRFID3 = false;
}
if (selectedRFID == 4 && processRFID4 == true) {
digitalWrite(SS_PIN1, LOW); //Aktifkan RFID
mcp1.digitalWrite(RST_PIN4, HIGH);
rfid4.PCD_Init();
if (rfid4.PICC_IsNewCardPresent() && rfid4.PICC_ReadCardSerial()) {
rfidUID4 = "";
for (byte i = 0; i < rfid4.uid.size; i++) {
rfidUID4 += String(rfid4.uid.uidByte[i] < 0x10 ? "0" : "");
rfidUID4 += String(rfid4.uid.uidByte[i], HEX);
}
rfidUID4.toUpperCase();
Serial.println("UID RFID: " + rfidUID4);
}
else {
rfidUID4 = "No RFID4";
}
rfid4.PICC_HaltA();
digitalWrite(SS_PIN1, HIGH); //Nonaktifkan RFID
mcp1.digitalWrite(RST_PIN4, LOW);
processRFID4 = false;
}
if (selectedRFID == 5 && processRFID5 == true) {
digitalWrite(SS_PIN1, LOW); //Aktifkan RFID
mcp1.digitalWrite(RST_PIN5, HIGH);
rfid5.PCD_Init();
if (rfid5.PICC_IsNewCardPresent() && rfid5.PICC_ReadCardSerial()) {
rfidUID5 = "";
for (byte i = 0; i < rfid5.uid.size; i++) {
rfidUID5 += String(rfid5.uid.uidByte[i] < 0x10 ? "0" : "");
rfidUID5 += String(rfid5.uid.uidByte[i], HEX);
}
rfidUID5.toUpperCase();
Serial.println("UID RFID: " + rfidUID5);
}
else {
rfidUID5 = "No RFID5";
}
rfid5.PICC_HaltA();
digitalWrite(SS_PIN1, HIGH); //Nonaktifkan RFID
mcp1.digitalWrite(RST_PIN5, LOW);
processRFID5 = false;
}
if (selectedRFID == 6 && processRFID6 == true) {
digitalWrite(SS_PIN1, LOW); //Aktifkan RFID
mcp1.digitalWrite(RST_PIN6, HIGH);
rfid6.PCD_Init();
if (rfid6.PICC_IsNewCardPresent() && rfid6.PICC_ReadCardSerial()) {
rfidUID6 = "";
for (byte i = 0; i < rfid6.uid.size; i++) {
rfidUID6 += String(rfid6.uid.uidByte[i] < 0x10 ? "0" : "");
rfidUID6 += String(rfid6.uid.uidByte[i], HEX);
}
rfidUID6.toUpperCase();
Serial.println("UID RFID: " + rfidUID6);
}
else {
rfidUID6 = "No RFID6";
}
rfid6.PICC_HaltA();
digitalWrite(SS_PIN1, HIGH); //Nonaktifkan RFID
mcp1.digitalWrite(RST_PIN6, LOW);
processRFID6 = false;
}
if (selectedRFID == 7 && processRFID7 == true) {
digitalWrite(SS_PIN1, LOW); //Aktifkan RFID
mcp1.digitalWrite(RST_PIN7, HIGH);
rfid7.PCD_Init();
if (rfid7.PICC_IsNewCardPresent() && rfid7.PICC_ReadCardSerial()) {
rfidUID7 = "";
for (byte i = 0; i < rfid7.uid.size; i++) {
rfidUID7 += String(rfid7.uid.uidByte[i] < 0x10 ? "0" : "");
rfidUID7 += String(rfid7.uid.uidByte[i], HEX);
}
rfidUID7.toUpperCase();
Serial.println("UID RFID: " + rfidUID7);
}
else {
rfidUID7 = "No RFID7";
}
rfid7.PICC_HaltA();
digitalWrite(SS_PIN1, HIGH); //Nonaktifkan RFID
mcp1.digitalWrite(RST_PIN7, LOW);
processRFID7 = false;
}
if (selectedRFID == 8 && processRFID8 == true) {
digitalWrite(SS_PIN1, LOW); //Aktifkan RFID
mcp1.digitalWrite(RST_PIN8, HIGH);
rfid8.PCD_Init();
if (rfid8.PICC_IsNewCardPresent() && rfid8.PICC_ReadCardSerial()) {
rfidUID8 = "";
for (byte i = 0; i < rfid8.uid.size; i++) {
rfidUID8 += String(rfid8.uid.uidByte[i] < 0x10 ? "0" : "");
rfidUID8 += String(rfid8.uid.uidByte[i], HEX);
}
rfidUID8.toUpperCase();
Serial.println("UID RFID: " + rfidUID8);
}
else {
rfidUID8 = "No RFID8";
}
rfid8.PICC_HaltA();
digitalWrite(SS_PIN1, HIGH); //Nonaktifkan RFID
mcp1.digitalWrite(RST_PIN8, LOW);
processRFID8 = false;
}
if (selectedRFID == 9 && processRFID9 == true) {
digitalWrite(SS_PIN1, LOW); //Aktifkan RFID
mcp1.digitalWrite(RST_PIN9, HIGH);
rfid9.PCD_Init();
//rfid9.PCD_SetAntennaGain(rfid9.RxGain_max);
if (rfid9.PICC_IsNewCardPresent() && rfid9.PICC_ReadCardSerial()) {
rfidUID9 = "";
for (byte i = 0; i < rfid9.uid.size; i++) {
rfidUID9 += String(rfid9.uid.uidByte[i] < 0x10 ? "0" : "");
rfidUID9 += String(rfid9.uid.uidByte[i], HEX);
}
rfidUID9.toUpperCase();
Serial.println("UID RFID: " + rfidUID9);
}
else {
rfidUID9 = "No RFID9";
}
rfid9.PICC_HaltA();
digitalWrite(SS_PIN1, HIGH); //Nonaktifkan RFID
mcp1.digitalWrite(RST_PIN9, LOW);
processRFID9 = false;
}
if (selectedRFID == 10 && processRFID10 == true) {
digitalWrite(SS_PIN1, LOW); //Aktifkan RFID
mcp1.digitalWrite(RST_PIN10, HIGH);
rfid10.PCD_Init();
//rfid10.PCD_SetAntennaGain(rfid10.RxGain_max);
if (rfid10.PICC_IsNewCardPresent() && rfid10.PICC_ReadCardSerial()) {
rfidUID10 = "";
for (byte i = 0; i < rfid10.uid.size; i++) {
rfidUID10 += String(rfid10.uid.uidByte[i] < 0x10 ? "0" : "");
rfidUID10 += String(rfid10.uid.uidByte[i], HEX);
}
rfidUID10.toUpperCase();
Serial.println("UID RFID: " + rfidUID10);
}
else {
rfidUID10 = "NoRFID10";
}
rfid10.PICC_HaltA();
digitalWrite(SS_PIN1, HIGH); //Nonaktifkan RFID
mcp1.digitalWrite(RST_PIN10, LOW);
processRFID10 = false;
}
if (selectedRFID == 11 && processRFID11 == true) {
digitalWrite(SS_PIN1, LOW); //Aktifkan RFID
mcp1.digitalWrite(RST_PIN11, HIGH);
rfid11.PCD_Init();
//rfid11.PCD_SetAntennaGain(rfid11.RxGain_max);
if (rfid11.PICC_IsNewCardPresent() && rfid11.PICC_ReadCardSerial()) {
rfidUID11 = "";
for (byte i = 0; i < rfid11.uid.size; i++) {
rfidUID11 += String(rfid11.uid.uidByte[i] < 0x10 ? "0" : "");
rfidUID11 += String(rfid11.uid.uidByte[i], HEX);
}
rfidUID11.toUpperCase();
Serial.println("UID RFID: " + rfidUID11);
}
else {
rfidUID11 = "NoRFID11";
}
rfid11.PICC_HaltA();
digitalWrite(SS_PIN1, HIGH); //Nonaktifkan RFID
mcp1.digitalWrite(RST_PIN11, LOW);
processRFID11 = false;
}
if (selectedRFID == 12 && processRFID12 == true) {
digitalWrite(SS_PIN1, LOW); //Aktifkan RFID
mcp1.digitalWrite(RST_PIN12, HIGH);
rfid12.PCD_Init();
//rfid12.PCD_SetAntennaGain(rfid12.RxGain_max);
if (rfid12.PICC_IsNewCardPresent() && rfid12.PICC_ReadCardSerial()) {
rfidUID12 = "";
for (byte i = 0; i < rfid12.uid.size; i++) {
rfidUID12 += String(rfid12.uid.uidByte[i] < 0x10 ? "0" : "");
rfidUID12 += String(rfid12.uid.uidByte[i], HEX);
}
rfidUID12.toUpperCase();
Serial.println("UID RFID: " + rfidUID12);
}
else {
rfidUID12 = "NoRFID12";
}
rfid12.PICC_HaltA();
digitalWrite(SS_PIN1, HIGH); //Nonaktifkan RFID
mcp1.digitalWrite(RST_PIN12, LOW);
processRFID12 = false;
}
if (selectedRFID == 13 && processRFID13 == true) {
digitalWrite(SS_PIN1, LOW); //Aktifkan RFID
mcp1.digitalWrite(RST_PIN13, HIGH);
rfid13.PCD_Init();
if (rfid13.PICC_IsNewCardPresent() && rfid13.PICC_ReadCardSerial()) {
rfidUID13 = "";
for (byte i = 0; i < rfid13.uid.size; i++) {
rfidUID13 += String(rfid13.uid.uidByte[i] < 0x10 ? "0" : "");
rfidUID13 += String(rfid13.uid.uidByte[i], HEX);
}
rfidUID13.toUpperCase();
Serial.println("UID RFID: " + rfidUID13);
}
else {
rfidUID13 = "NoRFID13";
}
rfid13.PICC_HaltA();
digitalWrite(SS_PIN1, HIGH); //Nonaktifkan RFID
mcp1.digitalWrite(RST_PIN13, LOW);
processRFID13 = false;
}
if (selectedRFID == 14 && processRFID14 == true) {
digitalWrite(SS_PIN1, LOW); //Aktifkan RFID
mcp1.digitalWrite(RST_PIN14, HIGH);
rfid14.PCD_Init();
if (rfid14.PICC_IsNewCardPresent() && rfid14.PICC_ReadCardSerial()) {
rfidUID14 = "";
for (byte i = 0; i < rfid14.uid.size; i++) {
rfidUID14 += String(rfid14.uid.uidByte[i] < 0x10 ? "0" : "");
rfidUID14 += String(rfid14.uid.uidByte[i], HEX);
}
rfidUID14.toUpperCase();
Serial.println("UID RFID: " + rfidUID14);
}
else {
rfidUID14 = "NoRFID14";
}
rfid14.PICC_HaltA();
digitalWrite(SS_PIN1, HIGH); //Nonaktifkan RFID
mcp1.digitalWrite(RST_PIN14, LOW);
processRFID14 = false;
}
if (selectedRFID == 15 && processRFID15 == true) {
digitalWrite(SS_PIN1, LOW); //Aktifkan RFID
mcp1.digitalWrite(RST_PIN15, HIGH);
rfid15.PCD_Init();
if (rfid15.PICC_IsNewCardPresent() && rfid15.PICC_ReadCardSerial()) {
rfidUID15 = "";
for (byte i = 0; i < rfid15.uid.size; i++) {
rfidUID15 += String(rfid15.uid.uidByte[i] < 0x10 ? "0" : "");
rfidUID15 += String(rfid15.uid.uidByte[i], HEX);
}
rfidUID15.toUpperCase();
Serial.println("UID RFID: " + rfidUID15);
}
else {
rfidUID15 = "NoRFID15";
}
rfid15.PICC_HaltA();
digitalWrite(SS_PIN1, HIGH); //Nonaktifkan RFID
mcp1.digitalWrite(RST_PIN15, LOW);
processRFID15 = false;
}
if (selectedRFID == 16 && processRFID16 == true) {
digitalWrite(SS_PIN1, LOW); //Aktifkan RFID
mcp1.digitalWrite(RST_PIN16, HIGH);
rfid16.PCD_Init();
if (rfid16.PICC_IsNewCardPresent() && rfid16.PICC_ReadCardSerial()) {
rfidUID16 = "";
for (byte i = 0; i < rfid16.uid.size; i++) {
rfidUID16 += String(rfid16.uid.uidByte[i] < 0x10 ? "0" : "");
rfidUID16 += String(rfid16.uid.uidByte[i], HEX);
}
rfidUID16.toUpperCase();
Serial.println("UID RFID: " + rfidUID16);
}
else {
rfidUID16 = "NoRFID16";
}
rfid16.PICC_HaltA();
digitalWrite(SS_PIN1, HIGH); //Nonaktifkan RFID
mcp1.digitalWrite(RST_PIN16, LOW);
processRFID16 = false;
}
}
void requestEvent() {
if (selectedRFID == 1) {
if (rfidUID1.length() > 0) {
Wire.write(rfidUID1.c_str(), rfidUID1.length());
Serial.println(rfidUID1);
} else {
Wire.write("No RFID1");
}
}
if (selectedRFID == 2) {
if (rfidUID2.length() > 0) {
Wire.write(rfidUID2.c_str(), rfidUID2.length());
Serial.println(rfidUID2);
} else {
Wire.write("No RFID2");
}
}
if (selectedRFID == 3) {
if (rfidUID3.length() > 0) {
Wire.write(rfidUID3.c_str(), rfidUID3.length());
Serial.println(rfidUID3);
} else {
Wire.write("No RFID3");
}
}
if (selectedRFID == 4) {
if (rfidUID4.length() > 0) {
Wire.write(rfidUID4.c_str(), rfidUID4.length());
Serial.println(rfidUID4);
} else {
Wire.write("No RFID4");
}
}
if (selectedRFID == 5) {
if (rfidUID5.length() > 0) {
Wire.write(rfidUID5.c_str(), rfidUID5.length());
Serial.println(rfidUID5);
} else {
Wire.write("No RFID5");
}
}
if (selectedRFID == 6) {
if (rfidUID6.length() > 0) {
Wire.write(rfidUID6.c_str(), rfidUID6.length());
Serial.println(rfidUID6);
} else {
Wire.write("No RFID6");
}
}
if (selectedRFID == 7) {
if (rfidUID7.length() > 0) {
Wire.write(rfidUID7.c_str(), rfidUID7.length());
Serial.println(rfidUID7);
} else {
Wire.write("No RFID7");
}
}
if (selectedRFID == 8) {
if (rfidUID8.length() > 0) {
Wire.write(rfidUID8.c_str(), rfidUID8.length());
Serial.println(rfidUID8);
} else {
Wire.write("No RFID8");
}
}
if (selectedRFID == 9) {
if (rfidUID9.length() > 0) {
Wire.write(rfidUID9.c_str(), rfidUID9.length());
Serial.println(rfidUID9);
} else {
Wire.write("No RFID9");
}
}
if (selectedRFID == 10) {
if (rfidUID10.length() > 0) {
Wire.write(rfidUID10.c_str(), rfidUID10.length());
Serial.println(rfidUID10);
} else {
Wire.write("NoRFID10");
}
}
if (selectedRFID == 11) {
if (rfidUID11.length() > 0) {
Wire.write(rfidUID11.c_str(), rfidUID11.length());
Serial.println(rfidUID11);
} else {
Wire.write("NoRFID11");
}
}
if (selectedRFID == 12) {
if (rfidUID12.length() > 0) {
Wire.write(rfidUID12.c_str(), rfidUID12.length());
Serial.println(rfidUID12);
} else {
Wire.write("NoRFID12");
}
}
if (selectedRFID == 13) {
if (rfidUID13.length() > 0) {
Wire.write(rfidUID13.c_str(), rfidUID13.length());
Serial.println(rfidUID13);
} else {
Wire.write("NoRFID13");
}
}
if (selectedRFID == 14) {
if (rfidUID14.length() > 0) {
Wire.write(rfidUID14.c_str(), rfidUID14.length());
Serial.println(rfidUID14);
} else {
Wire.write("NoRFID14");
}
}
if (selectedRFID == 15) {
if (rfidUID15.length() > 0) {
Wire.write(rfidUID15.c_str(), rfidUID15.length());
Serial.println(rfidUID15);
} else {
Wire.write("NoRFID15");
}
}
if (selectedRFID == 16) {
if (rfidUID16.length() > 0) {
Wire.write(rfidUID16.c_str(), rfidUID16.length());
Serial.println(rfidUID16);
} else {
Wire.write("NoRFID16");
}
}
}
void receiveEvent(int howMany) {
if (Wire.available()) {
processRFID1 = true;
processRFID2 = true;
processRFID3 = true;
processRFID4 = true;
processRFID5 = true;
processRFID6 = true;
processRFID7 = true;
processRFID8 = true;
processRFID9 = true;
processRFID10 = true;
processRFID11 = true;
processRFID12 = true;
processRFID13 = true;
processRFID14 = true;
processRFID15 = true;
processRFID16 = true;
selectedRFID = Wire.read();
Serial.print("Perintah diterima: ");
Serial.println(selectedRFID);
}
}