Try changing to: if(Serial1.available() >= 12)
This will wait for the entire message to arrive rather than waiting for one or more characters to arrive and then trying to read 12 characters.
char tag[] ="51005F46642C"; // Replace with your own Tag ID
char input[12]; // A variable to store the Tag ID being presented
int count = 0; // A counter variable to navigate through the input[] character array
boolean flag = 0; // A variable to store the Tag match status
void setup()
{
Serial.begin(9600); // Initialise Serial Communication with the Serial Monitor
Serial1.begin(9600);
}
void loop()
{
if(Serial1.available())// Check if there is incoming data in the RFID Reader Serial Buffer.
{
count = 0; // Reset the counter to zero
/* Keep reading Byte by Byte from the Buffer till the RFID Reader Buffer is empty
or till 12 Bytes (the ID size of our Tag) is read */
while(Serial1.available() && count < 12)
{
input[count] = Serial1.read(); // Read 1 Byte of data and store it in the input[] variable
count++; // increment counter
delay(5);
}
/* When the counter reaches 12 (the size of the ID) we stop and compare each value
of the input[] to the corresponding stored value */
if(count == 12) //
{
count =0; // reset counter varibale to 0
flag = 1;
/* Iterate through each value and compare till either the 12 values are
all matching or till the first mistmatch occurs */
while(count<12 && flag !=0)
{
if(input[count]==tag[count])
flag = 1; // everytime the values match, we set the flag variable to 1
else
flag= 0;
/* if the ID values don't match, set flag variable to 0 and
stop comparing by exiting the while loop */
count++; // increment i
}
}
if(flag == 1) // If flag variable is 1, then it means the tags match
{
Serial.println("Access Allowed!");
}
else
{
Serial.println("Access Denied"); // Incorrect Tag Message
}
/* Fill the input variable array with a fixed value 'F' to overwrite
all values getting it empty for the next read cycle */
for(count=0; count<12; count++)
{
input[count]= 'F';
}
count = 0; // Reset counter variable
}
}
I am bit struggling where to put loop and check tag in program
char tag[][13] = {"FF0064F9D492", "FF0064F9D492", "FF0064F6D41C", "FF0064F9D482", "FF0064F6D47C"};
char input[12]; // A variable to store the Tag ID being presented
int count = 0; // A counter variable to navigate through the input[] character array
boolean flag = 0; // A variable to store the Tag match status
void setup()
{
Serial.begin(9600); // Initialise Serial Communication with the Serial Monitor
Serial1.begin(9600);
}
void loop()
{
if(Serial1.available())// Check if there is incoming data in the RFID Reader Serial Buffer.
{
count = 0; // Reset the counter to zero
/* Keep reading Byte by Byte from the Buffer till the RFID Reader Buffer is empty
or till 12 Bytes (the ID size of our Tag) is read */
while(Serial1.available() && count < 12)
{
input[count] = Serial1.read(); // Read 1 Byte of data and store it in the input[] variable
count++; // increment counter
delay(5);
}
/* When the counter reaches 12 (the size of the ID) we stop and compare each value
of the input[] to the corresponding stored value */
if(count == 12) //
{
count =0; // reset counter varibale to 0
flag = 1;
/* Iterate through each value and compare till either the 12 values are
all matching or till the first mistmatch occurs */
while(count<12 && flag !=0)
{
if(input[count]==tag[count])
flag = 1; // everytime the values match, we set the flag variable to 1
else
flag= 0;
/* if the ID values don't match, set flag variable to 0 and
stop comparing by exiting the while loop */
count++; // increment i
}
}
if(flag == 1) // If flag variable is 1, then it means the tags match
{
Serial.println("Access Allowed!");
}
else
{
Serial.println("Access Denied"); // Incorrect Tag Message
}
/* Fill the input variable array with a fixed value 'F' to overwrite
all values getting it empty for the next read cycle */
for(count=0; count<12; count++)
{
input[count]= 'F';
}
count = 0; // Reset counter variable
}
}