I need help in programming my arduino for a simple smart room project

I’m using an arduino clone, please check this link for more info on my arduino:

Arduino clone

My project is to upgrade a simple room into a smart room that whenever the instructor would swipe his/her ID, the appliances( air cons, fans, lights, computer, and etc.) would switch on, and after his/her second swipe the appliances are supposed to switch off.

Here is the RFID reader that I’am using:
RFID Reader

Here is the Code that has worked for me so far:

#include <SoftwareSerial.h>

// The RFID module's TX pin needs to be connected to the Arduino.

#define rxPin 2

#define txPin 5

// Create a software serial object for the connection to the RFID module

SoftwareSerial rfid = SoftwareSerial( rxPin, txPin );

// Set up outputs

#define futureOutput 12

#define ledPin 13

// Specify how long the output should be held.

#define unlockSeconds 2

// The tag database consists of two parts. The first part is an array of

// tag values with each tag taking up 5 bytes. The second is a list of

// names with one name for each tag (ie: group of 5 bytes). You can expand

// or shrink this as you see fit. Tags 2 and 3 are only there for example.

char* allowedTags[] = {

"76002C6E6B", // Tag 1

"76002C6E69", // Tag 2

"76002C6E6C", // Tag 3
"0300D55562", // Tag 4

};

// List of names to associate with the matching tag IDs

char* tagName[] = {

"Jason", // Tag 1

"Allen", // Tag 2

"PJ", // Tag 3
"John", // Tag 4

};

// Check the number of tags defined

int numberOfTags = sizeof(allowedTags)/sizeof(allowedTags[0]);

int incomingByte = 0; // To store incoming serial data

/**

* Setup

*/

void setup() {

pinMode(ledPin, OUTPUT);

digitalWrite(ledPin, LOW);

pinMode(futureOutput, OUTPUT);

digitalWrite(futureOutput, LOW);

Serial.begin(9600); // Serial port for connection to host

rfid.begin(9600); // Serial port for connection to RFID module

Serial.println("RFID Reader Initialized");

}

/**

* Loop

*/

void loop() {

byte i = 0;

byte val = 0;

byte checksum = 0;

byte bytesRead = 0;

byte tempByte = 0;

byte tagBytes[6]; // "Unique" tags are only 5 bytes but we need an extra byte for the checksum

char tagValue[10];

// Read from the RFID module. Because this connection uses SoftwareSerial

// there is no equivalent to the Serial.available() function, so at this

// point the program blocks while waiting for a value from the module

if(rfid.available() > 0) { //Dazu gebastelt

if((val = rfid.read()) == 2) { // Check for header

bytesRead = 0;

while (bytesRead < 12) { // Read 10 digit code + 2 digit checksum

if(rfid.available() > 0) {

val = rfid.read();

// Append the first 10 bytes (0 to 9) to the raw tag value

if (bytesRead < 10)

{

tagValue[bytesRead] = val;

}

// Check if this is a header or stop byte before the 10 digit reading is complete

if((val == 0x0D)||(val == 0x0A)||(val == 0x03)||(val == 0x02)) {

break; // Stop reading

}

// Ascii/Hex conversion:

if ((val >= '0') && (val <= '9')) {

val = val - '0';

}

else if ((val >= 'A') && (val <= 'F')) {

val = 10 + val - 'A';

}

// Every two hex-digits, add a byte to the code:

if (bytesRead & 1 == 1) {

// Make space for this hex-digit by shifting the previous digit 4 bits to the left

tagBytes[bytesRead >> 1] = (val | (tempByte << 4));

if (bytesRead >> 1 != 5) { // If we're at the checksum byte,

checksum ^= tagBytes[bytesRead >> 1]; // Calculate the checksum... (XOR)

};

} else {

tempByte = val; // Store the first hex digit first

};

bytesRead++;

} // Ready to read next digit

}

// Send the result to the host connected via USB

if (bytesRead == 12) { // 12 digit read is complete

tagValue[10] = '\0'; // Null-terminate the string

Serial.print("Tag read: ");

for (i=0; i<5; i++) {

// Add a leading 0 to pad out values below 16

if (tagBytes[i] < 16) {

Serial.print("0");

}

Serial.print(tagBytes[i], HEX);

}

Serial.println();

Serial.print("Checksum: ");

Serial.print(tagBytes[5], HEX);

Serial.println(tagBytes[5] == checksum ? " -- passed." : " -- error.");

// Show the raw tag value

Serial.print("VALUE: ");

Serial.println(tagValue);

// Search the tag database for this particular tag

int tagId = findTag( tagValue );

// Only fire the strike plate if this tag was found in the database

if( tagId > 0 )

{

Serial.print("Authorized tag ID ");

Serial.print(tagId);

Serial.print(": unlocking for ");

Serial.println(tagName[tagId - 1]); // Get the name for this tag from the database

unlock(); // Fire the strike plate to open the lock

} else {

Serial.println("Tag not authorized");

}

Serial.println(); // Blank separator line in output

}

bytesRead = 0;

}

}

}

/**

* Fire the relay to activate the strike plate for the configured

* number of seconds.

*/

void unlock() {

digitalWrite(ledPin, HIGH);

digitalWrite(futureOutput, HIGH);

delay(unlockSeconds * 1000);

digitalWrite(futureOutput, LOW);

digitalWrite(ledPin, LOW);

}

/**

* Search for a specific tag in the database

*/

int findTag( char tagValue[10] ) {

for (int thisCard = 0; thisCard < numberOfTags; thisCard++) {

// Check if the tag value matches this row in the tag database

if(strcmp(tagValue, allowedTags[thisCard]) == 0)

{

// The row in the database starts at 0, so add 1 to the result so

// that the card ID starts from 1 instead (0 represents "no match")

return(thisCard + 1);

}

}

// If we don't find the tag return a tag ID of 0 to show there was no match

return(0);

}

This code allows my arduino to read and authorize my RFID tags, but the problem is it turns off after reading the tag. So what I want to do is to program the arduino to Constantly supply for the output and the turn off only after the second swipe of the RFID tag used in turning it on, or any other RFID tag that is registered in the program.

I’m really a newbie in programming arduino, and I have googled so many things about this project but this is only what I have accomplished so far so I would really appreciate if someone could provide me a specific code for my project.