You are on page 1of 16

#include <MFRC522.

h>
#include <SPI.h>

#define L1_MOTOR 30
#define L2_MOTOR 31
#define L_ENA 6

#define R1_MOTOR 32
#define R2_MOTOR 33
#define R_ENA 7

#define TRIG_PIN 34
#define ECHO_PIN 35

#define L_IR 36
#define R_IR 37

#define RED_LED 38
#define GREEN_LED 39
#define BLUE_LED 40

#define RST_PIN 5
#define SS_PIN 53
MFRC522 mfrc522 (SS_PIN, RST_PIN);

int distance;
int counter;
long duration;
String content;
String command;
bool flag = true;

void setup ()
{
Serial.begin (9600);
SPI.begin ();
mfrc522.PCD_Init ();

Serial.println ("STARTING");
delay (500);
Serial.println ("PLEASE WAIT . . . ");
delay (2500);

pinMode (L1_MOTOR, OUTPUT);


pinMode (L2_MOTOR, OUTPUT);
pinMode (L_ENA, OUTPUT);

pinMode (R1_MOTOR, OUTPUT);


pinMode (R2_MOTOR, OUTPUT);
pinMode (R_ENA, OUTPUT);

pinMode (TRIG_PIN, OUTPUT);


pinMode (ECHO_PIN, INPUT);

pinMode (L_IR, INPUT);


pinMode (R_IR, INPUT);

pinMode (RED_LED, OUTPUT);


pinMode (GREEN_LED, OUTPUT);
pinMode (BLUE_LED, OUTPUT);
}

//----------------------------------------
//LEDs

void RED ()
{
digitalWrite (RED_LED, HIGH);
digitalWrite (GREEN_LED, LOW);
digitalWrite (BLUE_LED, LOW);
}

void GREEN ()
{
digitalWrite (RED_LED, LOW);
digitalWrite (GREEN_LED, HIGH);
digitalWrite (BLUE_LED, LOW);
}

void BLUE ()
{
digitalWrite (RED_LED, LOW);
digitalWrite (GREEN_LED, LOW);
digitalWrite (BLUE_LED, HIGH);
}

void RGB ()
{
digitalWrite (RED_LED, HIGH);
digitalWrite (GREEN_LED, LOW);
digitalWrite (BLUE_LED, LOW);
delay (500);

digitalWrite (RED_LED, LOW);


digitalWrite (GREEN_LED, HIGH);
digitalWrite (BLUE_LED, LOW);
delay (500);

digitalWrite (RED_LED, LOW);


digitalWrite (GREEN_LED, LOW);
digitalWrite (BLUE_LED, HIGH);
delay (500);
}

void OFF ()
{
digitalWrite (RED_LED, LOW);
digitalWrite (GREEN_LED, LOW);
digitalWrite (BLUE_LED, LOW);
}

//----------------------------------------
//MOTORs
void FORWARD ()
{
Serial.println ("FORWARD");
GREEN ();
digitalWrite (L1_MOTOR, HIGH);
digitalWrite (L2_MOTOR, LOW);
analogWrite (L_ENA, 60);

digitalWrite (R1_MOTOR, HIGH);


digitalWrite (R2_MOTOR, LOW);
analogWrite (R_ENA, 60);
}

void STOP ()
{
Serial.println ("STOP");
RED ();

digitalWrite (L1_MOTOR, LOW);


digitalWrite (L2_MOTOR, LOW);
analogWrite (L_ENA, 0);

digitalWrite (R1_MOTOR, LOW);


digitalWrite (R2_MOTOR, LOW);
analogWrite (R_ENA, 0);
}

void LEFT ()
{
Serial.println ("LEFT");
BLUE ();

digitalWrite (L1_MOTOR, LOW);


digitalWrite (L2_MOTOR, HIGH);
analogWrite (L_ENA, 60);

digitalWrite (R1_MOTOR, HIGH);


digitalWrite (R2_MOTOR, LOW);
analogWrite (R_ENA, 60);
}

void RIGHT ()
{
Serial.println ("RIGHT");
BLUE ();

digitalWrite (L1_MOTOR, HIGH);


digitalWrite (L2_MOTOR, LOW);
analogWrite (L_ENA, 60);

digitalWrite (R1_MOTOR, LOW);


digitalWrite (R2_MOTOR, HIGH);
analogWrite (R_ENA, 60);
}

//----------------------------------------
//RETURN
void RETURN ()
{
while (flag)
{
Serial.println ("DONE!");
RGB ();
delay (1500);
OFF ();

if (flag == true)
{
flag = false;
counter = 0;
command = "";
return ;
}
}
}

//----------------------------------------
//RETURNING FROM STATION
void RETURN_ONE ()
{
while (flag)
{
Serial.println ("RETURNING");
RGB ();
delay (1500);
OFF ();

if (flag == true)
{
flag = false;
counter = 1;
command = "";
return ;
}
}
}

void RETURN_TWO ()
{
while (flag)
{
Serial.println ("RETURNING");
RGB ();
delay (1500);
OFF ();

if (flag == true)
{
flag = false;
counter = 2;
command = "";
return ;
}
}
}

void RETURN_THREE ()
{
while (flag)
{
Serial.println ("RETURNING");
RGB ();
delay (1500);
OFF ();

if (flag == true)
{
flag = false;
counter = 3;
command = "";
return ;
}
}
}

void RETURN_FOUR ()
{
while (flag)
{
Serial.println ("RETURNING");
RGB ();
delay (1500);
OFF ();

if (flag == true)
{
flag = false;
counter = 4;
command = "";
return ;
}
}
}

//----------------------------------------
//COMMANDS

//CASHIER
void CASHIER ()
{
digitalWrite (TRIG_PIN, LOW);
delayMicroseconds (2);
digitalWrite (TRIG_PIN, HIGH);
delayMicroseconds (10);
digitalWrite (TRIG_PIN, LOW);

duration = pulseIn (ECHO_PIN, HIGH);


distance = duration * 0.032 / 2;

if (digitalRead (L_IR) == LOW && digitalRead (R_IR) == LOW)


{
FORWARD ();
}
else if (digitalRead (L_IR) == HIGH && digitalRead (R_IR) == LOW)
{
LEFT ();
}
else if (digitalRead (L_IR) == LOW && digitalRead (R_IR) == HIGH)
{
RIGHT ();
}
else if (digitalRead (L_IR) == HIGH && digitalRead (R_IR) == HIGH || distance <=
10)
{
STOP ();
}

if (!mfrc522.PICC_IsNewCardPresent ())
{
return ;
}
if (!mfrc522.PICC_ReadCardSerial ())
{
return ;
}

content = "";
byte letter;

for (byte i = 0 ; i < mfrc522.uid.size ; i++)


{
content.concat (String (mfrc522.uid.uidByte [i] < 0x10 ? " 0" : " "));
content.concat (String (mfrc522.uid.uidByte [i], HEX));
}
content.toUpperCase ();

if (content.substring (1) == "53 E8 28 60 71 00 01")


{
STOP ();
delay (300);
LEFT ();
delay (800);
STOP ();

RETURN_ONE ();
}
}

void CASHIER_ELEVATOR ()
{
digitalWrite (TRIG_PIN, LOW);
delayMicroseconds (2);
digitalWrite (TRIG_PIN, HIGH);
delayMicroseconds (10);
digitalWrite (TRIG_PIN, LOW);

duration = pulseIn (ECHO_PIN, HIGH);


distance = duration * 0.032 / 2;

if (digitalRead (L_IR) == LOW && digitalRead (R_IR) == LOW)


{
FORWARD ();
}
else if (digitalRead (L_IR) == HIGH && digitalRead (R_IR) == LOW)
{
LEFT ();
}
else if (digitalRead (L_IR) == LOW && digitalRead (R_IR) == HIGH)
{
RIGHT ();
}
else if (digitalRead (L_IR) == HIGH && digitalRead (R_IR) == HIGH || distance <=
10)
{
STOP ();
}

if (!mfrc522.PICC_IsNewCardPresent ())
{
return ;
}
if (!mfrc522.PICC_ReadCardSerial ())
{
return ;
}

content = "";
byte letter;

for (byte i = 0 ; i < mfrc522.uid.size ; i++)


{
content.concat (String (mfrc522.uid.uidByte [i] < 0x10 ? " 0" : " "));
content.concat (String (mfrc522.uid.uidByte [i], HEX));
}
content.toUpperCase ();

if (content.substring (1) == "53 E9 28 60 71 00 01")


{
STOP ();
delay (300);
LEFT ();
delay (800);
STOP ();

RETURN ();
}
}

//BUSINESS OFFICE
void BUSINESS ()
{
digitalWrite (TRIG_PIN, LOW);
delayMicroseconds (2);
digitalWrite (TRIG_PIN, HIGH);
delayMicroseconds (10);
digitalWrite (TRIG_PIN, LOW);

duration = pulseIn (ECHO_PIN, HIGH);


distance = duration * 0.032 / 2;

if (digitalRead (L_IR) == LOW && digitalRead (R_IR) == LOW)


{
FORWARD ();
}
else if (digitalRead (L_IR) == HIGH && digitalRead (R_IR) == LOW)
{
LEFT ();
}
else if (digitalRead (L_IR) == LOW && digitalRead (R_IR) == HIGH)
{
RIGHT ();
}
else if (digitalRead (L_IR) == HIGH && digitalRead (R_IR) == HIGH || distance <=
10)
{
STOP ();
}

if (!mfrc522.PICC_IsNewCardPresent ())
{
return ;
}
if (!mfrc522.PICC_ReadCardSerial ())
{
return ;
}

content = "";
byte letter;

for (byte i = 0 ; i < mfrc522.uid.size ; i++)


{
content.concat (String (mfrc522.uid.uidByte [i] < 0x10 ? " 0" : " "));
content.concat (String (mfrc522.uid.uidByte [i], HEX));
}
content.toUpperCase ();

if (content.substring (1) == "53 E2 28 60 71 00 01")


{
RIGHT ();
delay (550);
STOP ();
delay (300);
}

if (content.substring (1) == "53 E0 28 60 71 00 01")


{
STOP ();
delay (300);
LEFT ();
delay (800);
STOP ();

RETURN_TWO ();
}
}

void BUSINESS_ELEVATOR ()
{
digitalWrite (TRIG_PIN, LOW);
delayMicroseconds (2);
digitalWrite (TRIG_PIN, HIGH);
delayMicroseconds (10);
digitalWrite (TRIG_PIN, LOW);

duration = pulseIn (ECHO_PIN, HIGH);


distance = duration * 0.032 / 2;
if (digitalRead (L_IR) == LOW && digitalRead (R_IR) == LOW)
{
FORWARD ();
}
else if (digitalRead (L_IR) == HIGH && digitalRead (R_IR) == LOW)
{
LEFT ();
}
else if (digitalRead (L_IR) == LOW && digitalRead (R_IR) == HIGH)
{
RIGHT ();
}
else if (digitalRead (L_IR) == HIGH && digitalRead (R_IR) == HIGH || distance <=
10)
{
STOP ();
}

if (!mfrc522.PICC_IsNewCardPresent ())
{
return ;
}
if (!mfrc522.PICC_ReadCardSerial ())
{
return ;
}

content = "";
byte letter;

for (byte i = 0 ; i < mfrc522.uid.size ; i++)


{
content.concat (String (mfrc522.uid.uidByte [i] < 0x10 ? " 0" : " "));
content.concat (String (mfrc522.uid.uidByte [i], HEX));
}
content.toUpperCase ();

if (content.substring (1) == "53 E1 28 60 71 00 01")


{
FORWARD ();
delay (400);
STOP ();
delay (300);
LEFT ();
delay (550);
STOP ();
delay (300);
}

if (content.substring (1) == "53 E9 28 60 71 00 01")


{
STOP ();
delay (300);
LEFT ();
delay (800);
STOP ();

RETURN ();
}
}

//TOOL_ROOM
void TOOL ()
{
digitalWrite (TRIG_PIN, LOW);
delayMicroseconds (2);
digitalWrite (TRIG_PIN, HIGH);
delayMicroseconds (10);
digitalWrite (TRIG_PIN, LOW);

duration = pulseIn (ECHO_PIN, HIGH);


distance = duration * 0.032 / 2;

if (digitalRead (L_IR) == LOW && digitalRead (R_IR) == LOW)


{
FORWARD ();
}
else if (digitalRead (L_IR) == HIGH && digitalRead (R_IR) == LOW)
{
LEFT ();
}
else if (digitalRead (L_IR) == LOW && digitalRead (R_IR) == HIGH)
{
RIGHT ();
}
else if (digitalRead (L_IR) == HIGH && digitalRead (R_IR) == HIGH || distance <=
10)
{
STOP ();
}

if (!mfrc522.PICC_IsNewCardPresent ())
{
return ;
}
if (!mfrc522.PICC_ReadCardSerial ())
{
return ;
}

content = "";
byte letter;

for (byte i = 0 ; i < mfrc522.uid.size ; i++)


{
content.concat (String (mfrc522.uid.uidByte [i] < 0x10 ? " 0" : " "));
content.concat (String (mfrc522.uid.uidByte [i], HEX));
}
content.toUpperCase ();

if (content.substring (1) == "53 E2 28 60 71 00 01")


{
RIGHT ();
delay (550);
STOP ();
delay (300);
}
if (content.substring (1) == "53 EB 28 60 71 00 01")
{
STOP ();
delay (300);
LEFT ();
delay (800);
STOP ();

RETURN_THREE ();
}
}

void TOOL_ELEVATOR ()
{
digitalWrite (TRIG_PIN, LOW);
delayMicroseconds (2);
digitalWrite (TRIG_PIN, HIGH);
delayMicroseconds (10);
digitalWrite (TRIG_PIN, LOW);

duration = pulseIn (ECHO_PIN, HIGH);


distance = duration * 0.032 / 2;

if (digitalRead (L_IR) == LOW && digitalRead (R_IR) == LOW)


{
FORWARD ();
}
else if (digitalRead (L_IR) == HIGH && digitalRead (R_IR) == LOW)
{
LEFT ();
}
else if (digitalRead (L_IR) == LOW && digitalRead (R_IR) == HIGH)
{
RIGHT ();
}
else if (digitalRead (L_IR) == HIGH && digitalRead (R_IR) == HIGH || distance <=
10)
{
STOP ();
}

if (!mfrc522.PICC_IsNewCardPresent ())
{
return ;
}
if (!mfrc522.PICC_ReadCardSerial ())
{
return ;
}

content = "";
byte letter;

for (byte i = 0 ; i < mfrc522.uid.size ; i++)


{
content.concat (String (mfrc522.uid.uidByte [i] < 0x10 ? " 0" : " "));
content.concat (String (mfrc522.uid.uidByte [i], HEX));
}
content.toUpperCase ();
if (content.substring (1) == "53 E1 28 60 71 00 01")
{
FORWARD ();
delay (400);
STOP ();
delay (300);
LEFT ();
delay (550);
STOP ();
delay (300);
}

if (content.substring (1) == "53 E9 28 60 71 00 01")


{
STOP ();
delay (300);
LEFT ();
delay (800);
STOP ();

RETURN ();
}
}

//REGISTRAR
void REGISTRAR ()
{
digitalWrite (TRIG_PIN, LOW);
delayMicroseconds (2);
digitalWrite (TRIG_PIN, HIGH);
delayMicroseconds (10);
digitalWrite (TRIG_PIN, LOW);

duration = pulseIn (ECHO_PIN, HIGH);


distance = duration * 0.032 / 2;

if (digitalRead (L_IR) == LOW && digitalRead (R_IR) == LOW)


{
FORWARD ();
}
else if (digitalRead (L_IR) == HIGH && digitalRead (R_IR) == LOW)
{
LEFT ();
}
else if (digitalRead (L_IR) == LOW && digitalRead (R_IR) == HIGH)
{
RIGHT ();
}
else if (digitalRead (L_IR) == HIGH && digitalRead (R_IR) == HIGH || distance <=
10)
{
STOP ();
}

if (!mfrc522.PICC_IsNewCardPresent ())
{
return ;
}
if (!mfrc522.PICC_ReadCardSerial ())
{
return ;
}

content = "";
byte letter;

for (byte i = 0 ; i < mfrc522.uid.size ; i++)


{
content.concat (String (mfrc522.uid.uidByte [i] < 0x10 ? " 0" : " "));
content.concat (String (mfrc522.uid.uidByte [i], HEX));
}
content.toUpperCase ();

if (content.substring (1) == "53 E2 28 60 71 00 01")


{
STOP ();
delay (300);
LEFT ();
delay (550);
STOP ();
delay (300);
}

if (content.substring (1) == "53 EA 28 60 71 00 01")


{
STOP ();
delay (300);
LEFT ();
delay (550);
STOP ();
delay (300);
}

if (content.substring (1) == "53 F3 28 60 71 00 01")


{
STOP ();
delay (300);
LEFT ();
delay (800);
STOP ();

RETURN_FOUR ();
}
}

void REGISTRAR_ELEVATOR ()
{
digitalWrite (TRIG_PIN, LOW);
delayMicroseconds (2);
digitalWrite (TRIG_PIN, HIGH);
delayMicroseconds (10);
digitalWrite (TRIG_PIN, LOW);

duration = pulseIn (ECHO_PIN, HIGH);


distance = duration * 0.032 / 2;

if (digitalRead (L_IR) == LOW && digitalRead (R_IR) == LOW)


{
FORWARD ();
}
else if (digitalRead (L_IR) == HIGH && digitalRead (R_IR) == LOW)
{
LEFT ();
}
else if (digitalRead (L_IR) == LOW && digitalRead (R_IR) == HIGH)
{
RIGHT ();
}
else if (digitalRead (L_IR) == HIGH && digitalRead (R_IR) == HIGH || distance <=
10)
{
STOP ();
}

if (!mfrc522.PICC_IsNewCardPresent ())
{
return ;
}
if (!mfrc522.PICC_ReadCardSerial ())
{
return ;
}

content = "";
byte letter;

for (byte i = 0 ; i < mfrc522.uid.size ; i++)


{
content.concat (String (mfrc522.uid.uidByte [i] < 0x10 ? " 0" : " "));
content.concat (String (mfrc522.uid.uidByte [i], HEX));
}
content.toUpperCase ();

if (content.substring (1) == "53 3D B5 DF 70 00 01")


{
STOP ();
delay (300);
FORWARD ();
delay (400);
RIGHT ();
delay (550);
STOP ();
delay (300);
}

if (content.substring (1) == "53 D2 A6 DF 70 00 01")


{
STOP ();
delay (300);
FORWARD ();
delay (400);
RIGHT ();
delay (550);
STOP ();
delay (300);
}
if (content.substring (1) == "53 E9 28 60 71 00 01")
{
STOP ();
delay (300);
LEFT ();
delay (800);
STOP ();

RETURN ();
}
}

void loop ()
{
flag = true ;

while (Serial.available ())


{
command = "";
command = Serial.readString ();
}

//FORT
if (command == "*cashier#" || command == "*Cashier#")
{
CASHIER ();
}

if (command == "*business office#" || command == "*Business office#" || command


== "*Business Office#")
{
BUSINESS ();
}

if (command == "*tool room#" || command == "*Tool room#" || command == "*Tool


Room#")
{
TOOL ();
}

if (command == "*registrar#" || command == "*Registrar#" || command ==


("*Register#") || command == "*register#")
{
REGISTRAR ();
}

//BACK
if (counter == 1)
{
CASHIER_ELEVATOR ();
}

if (counter == 2)
{
BUSINESS_ELEVATOR ();
}

if (counter == 3)
{
TOOL_ELEVATOR ();
}

if (counter == 4)
{
REGISTRAR_ELEVATOR ();
}
}

You might also like