Morning,
I have made an door lock system base on arduino UNO and DFR0231 reader.
Everything work but i just notice that the card reader unlunck the door whatever the tag, even if it's new
I wondering how put in the code my own tag's ID.... an email by exemple: text@gmail.com
Thanks before for your assistance
/*
# Product: NFC Module for Arduino
# SKU : DFR0231
command list:
#wake up reader
send: 55 55 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 03 fd d4 14 01 17 00
return: 00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00
#get firmware
send: 00 00 FF 02 FE D4 02 2A 00
return: 00 00 FF 00 FF 00 00 00 FF 06 FA D5 03 32 01 06 07 E8 00
#read the tag
send: 00 00 FF 04 FC D4 4A 01 00 E1 00
return: 00 00 FF 00 FF 00 00 00 FF 0C F4 D5 4B 01 01 00 04 08 04 XX XX XX XX 5A 00
XX is tag.
mine: 00 00 FF 00 FF 00 00 00 FF 0C F4 D5 4B 01 01 00 04 08 04 07 8C FC 4F F0 00
(In this program, I'll use XX XX XX XX 5A as tag ID)
*/
#define wake_result 15
#define firmware_result 19
#define tag_result 25
const unsigned char wake[24]={
0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xfd, 0xd4, 0x14, 0x01, 0x17, 0x00};//wake up NFC module
const unsigned char firmware[9]={
0x00, 0x00, 0xFF, 0x02, 0xFE, 0xD4, 0x02, 0x2A, 0x00};
const unsigned char tag[11]={
0x00, 0x00, 0xFF, 0x04, 0xFC, 0xD4, 0x4A, 0x01, 0x00, 0xE1, 0x00};
const unsigned char std_ACK[25] = {
0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x0C, \
0xF4, 0xD5, 0x4B, 0x01, 0x01, 0x00, 0x04, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x00};
unsigned char old_id[5];
unsigned char cur_id[5];
unsigned char receive_ACK[25];
const int redPin = 4; // R petal on RGB LED module connected to digital pin 11
const int greenPin = 5; // G petal on RGB LED module connected to digital pin 10
const int bluePin = 6; // B petal on RGB LED module connected to digital pin 9
//open the door
boolean door_open = false;
#include <Stepper.h>
#define gearratio 64 //This is used to make the gear ration 1:64
const int stepsPerRevolution = 2048;
Stepper garage_door(stepsPerRevolution, 8, 10, 9, 11);
uint32_t time;
void setup()
{
Serial.begin(115200);
delay(100);
Serial.println("wake card");
delay(100);
wake_card();
delay(100);
read_ACK(wake_result);
delay(100);
display(wake_result);
firmware_version();
delay(100);
read_ACK(firmware_result);
delay(100);
display(firmware_result);
garage_door.setSpeed(0.15*gearratio);
delay(500);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop()
{
send_tag();
read_ACK(tag_result);
read_id();
if (!no_detection()) {
print_id();
}
delay(500);
time = millis();
if (door_open){
garage_door.step(-stepsPerRevolution/20);
while (door_open){
if (millis()-time > 30000) door_open = false;
color(0,255, 0);
}
garage_door.step(stepsPerRevolution/20);
delay(100);
}
}
void color (unsigned char red, unsigned char green, unsigned char blue)
{
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}
void UART_Send_Byte(unsigned char command_data)
{
Serial.write(command_data);
Serial.flush();
}
void wake_card(void)
{
unsigned char i;
for(i=0;i<24;i++)
UART_Send_Byte(wake[i]);
}
void firmware_version(void)
{
unsigned char i;
for(i=0;i<9;i++)
UART_Send_Byte(firmware[i]);
}
void send_tag(void)
{
unsigned char i;
for(i=0;i<11;i++)
UART_Send_Byte(tag[i]);
}
void read_ACK(unsigned char temp)
{
unsigned char i;
for(i=0;i<temp;i++) {
receive_ACK[i]= Serial.read();
}
}
void display(unsigned char tem)
{
for (int i=0;i<tem;i++)
{
if (receive_ACK[i] < 16)
Serial.print("0");
Serial.print(receive_ACK[i], HEX);
if (i<(tem-1)) Serial.print(" ");
}
Serial.println();
}
void copy_id (void)
{
int i;
for (i=0 ; i<5 ; i++) {
old_id[i] = cur_id[i];
}
}
void read_id (void) {
int ai, ci;
for (ci=0, ai=19; ci<5; ci++,ai++) {
cur_id[ci] = receive_ACK[ai];
}
}
char same_id (void)
{
int ai, oi;
for (oi=0,ai=19; oi<5; oi++,ai++) {
if (old_id[oi] != receive_ACK[ai])
return 0;
}
return 1;
}
char no_detection(void) {
int i;
for (i=0 ; i<sizeof(cur_id) ; i++) {
if (cur_id[i] != 255) {
door_open = true;
delay(500);
}
else {
door_open = false;
i = 16;
}
color(255, 0, 0);
delay(1000);
return 0;
}
return 1;
}
void print_id() {
for (int i=0 ; i<sizeof(cur_id) ; i++) {
if (cur_id[i] < 16)
Serial.print("0");
Serial.print(cur_id[i], HEX);
if (i<(sizeof(cur_id)-1)) Serial.print(" ");
}
Serial.println();
}