#include <SPI.h>
#include <RFID.h>
#define CS 49
#define SS_PIN 53
#define RST_PIN 9
//led8*8
#define DECODE_MODE 9
#define INTENSITY 0x0A
#define SCAN_LIMIT 0x0B
#define SHUTDOWN 0x0C
#define DISPLAY_TEST 0x0F

RFID rfid(SS_PIN, RST_PIN);
 
//int buzzPin = 3;
 
// Setup variables:
int serNum0;
int serNum1;
int serNum2;
int serNum3;
int serNum4;
int sumID = 0;
//correct led8*8
byte A[8]={B00100000,B00010000,B00001000,B00000100,
B00000010,B00000001,B00000010,B00000100};//1
//incorrect led8*8
byte B[8]={B10000001,B01000010,B00100100,B00011000,
B00011000,B00100100,B01000010,B10000001};//2

 void SendData(uint8_t address, uint8_t value) { 
 digitalWrite(CS, LOW); 
 SPI.transfer(address); // Send address.
 SPI.transfer(value); // Send the value.
 digitalWrite(CS, HIGH); // Finish transfer.
 }

void setup()
{
pinMode(CS, OUTPUT); 
pinMode(SS_PIN, OUTPUT); 
SPI.setBitOrder(MSBFIRST); // Most significant bit first 
Serial.begin(9600);
SPI.begin();
rfid.init();
SendData(DISPLAY_TEST, 0x01); // Run test - All LED segments lit.
delay(1000);
SendData(DISPLAY_TEST, 0x00); // Finish test mode.
SendData(DECODE_MODE, 0x00); // Disable BCD mode. 
SendData(INTENSITY, 0x0e); // Use lowest intensity. 
SendData(SCAN_LIMIT, 0x0f); // Scan all digits.
SendData(SHUTDOWN, 0x01); // Turn on chip.
SendData(DISPLAY_TEST, 0x01); // trun on All LED segments lit.
}
 
void loop()
{
 
if (rfid.isCard()) {
if (rfid.readCardSerial()) {
if (rfid.serNum[0] != serNum0
&& rfid.serNum[1] != serNum1
&& rfid.serNum[2] != serNum2
&& rfid.serNum[3] != serNum3
&& rfid.serNum[4] != serNum4
) {
// sum of rfid.serNum
for (int t=0;t<5;t++) { 
 sumID = sumID + rfid.serNum[t]; }
/* With a new cardnumber, show it. */
serNum0 = rfid.serNum[0];
serNum1 = rfid.serNum[1];
serNum2 = rfid.serNum[2];
serNum3 = rfid.serNum[3];
serNum4 = rfid.serNum[4];
 
//Serial.println(" ");
Serial.println("Cardnumber:");
Serial.print("Dec: ");
Serial.print(rfid.serNum[0],DEC);
Serial.print(", ");
Serial.print(rfid.serNum[1],DEC);
Serial.print(", ");
Serial.print(rfid.serNum[2],DEC);
Serial.print(", ");
Serial.print(rfid.serNum[3],DEC);
Serial.print(", ");
Serial.print(rfid.serNum[4],DEC);
Serial.println(" ");
 
Serial.print("Hex: ");
Serial.print(rfid.serNum[0],HEX);
Serial.print(", ");
Serial.print(rfid.serNum[1],HEX);
Serial.print(", ");
Serial.print(rfid.serNum[2],HEX);
Serial.print(", ");
Serial.print(rfid.serNum[3],HEX);
Serial.print(", ");
Serial.print(rfid.serNum[4],HEX);
Serial.println(" ");
} 
else {
/* If we have the same ID, just write a dot. */
Serial.print(".");
}
}
}
 
rfid.halt();//stop RFID
if(sumID > 0){
if(rfid.serNum[0] == 162
&& rfid.serNum[1] == 238
&& rfid.serNum[2] == 176
&& rfid.serNum[3] == 29
&& rfid.serNum[4] == 225 ){
  SendData(DISPLAY_TEST, 0x00); // trun off All LED segments lit.
for (int i=1;i<9;i++) {SendData(i, A[i-1]);}
}
else{ SendData(DISPLAY_TEST, 0x00); // trun off All LED segments lit.
for (int i=1;i<9;i++) {SendData(i, B[i-1]);}
}
}
}