Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 6

#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);
}

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);
}

//----------------------------------------
//
/*void return_One ()
{

}*/

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

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

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

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

//----------------------------------------
//COMMANDS
void COMMAND_ONE ()
{
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 ();
}
}

void COMMAND_TWO ()
{
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_LAST ();
}
}

void loop ()
{
flag = true ;

while (Serial.available ())


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

if (command == "*cashier#" || command == "*Cashier#")


{
COMMAND_ONE ();
}

if (counter == 1)
{
COMMAND_TWO ();
}
}

You might also like